Zend framework 3 base path no View Helper

Se você esta querendo acessar a propriedade $this->bashPath no Zend ViewHelper não irá conseguir, você precisa passar o serviço RendererInterface no construtor, segue o exemplo:

Module.php

public function getViewHelperConfig()
    {
        return [
            'factories' => [
                \Module\View\Helper\SuaClasse::class => \Module\View\Factory\SuaClasseFactory::class,
            ],
            'aliases' => [
                'SuaClasse' => \Module\View\Helper\SuaClasse::class,
            ],            
        ];
    }

SuaClasseFactory

namespace Module\View\Factory;

use Interop\Container\ContainerInterface;
use Zend\ServiceManager\Factory\FactoryInterface;

use Module\View\Helper\SuaClasse;

class SuaClasseFactory implements FactoryInterface {
          
    public function __invoke(ContainerInterface $container, $requestedName, array $options = null) {
        
        //Também estou passando o Doctrine... ignore
        $em = $container->get('Doctrine\ORM\EntityManager');   

        //Aqui estou pegando o serviço RendererInterface que contém o método basePath
        $rendererInterface = $container->get('Zend\View\Renderer\RendererInterface');
        
        return new SuaClasse($em, $rendererInterface  );
    }

}

SuaClasse

<?php

namespace Module\View\Helper;

use Zend\View\Helper\AbstractHelper;

class SuaClasse extends AbstractHelper {

    public $em = null;
    protected $rendererInterface = null;    

    public function setEm($em) {
        if (is_null($this->em)) {
            $this->em = $em;
        }
    }

    private function getEm(): \Doctrine\ORM\EntityManager {
        return $this->em;
    }

    //Recebo no construtor!
    public function __construct(\Doctrine\ORM\EntityManager $em, \Zend\View\Renderer\RendererInterface $rendererInterface) {
        $this->setEm($em);

        if (is_null($this->rendererInterface)) {
            $this->rendererInterface = $rendererInterface;
        }
    }

    public function umMetodoQualquer(){
         ?>
          <img src="<?php echo $this->rendererInterface->basePath('caminho/imagem.png'); ?>"/>"
         <?php
    }
}
?>

Agora em seu view

<?php echo $this->SuaClasse()->umMetodoQualquer(); ?>

Estrutura:

Module
- src
    View
        - Factory
            -> SuaClasseFactory.php
        - Helper
            -> SuaClasse.php
    Module.php

Espero que possa ter ajudado.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *