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.