25 out 2018
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.