View Helper
View helper é um padrão de classe que se permite ser usada dentro de views como se fossem objetos comuns. Às vezes precisamos executar um algoritmo pesado ou algo que necessite de banco de dados, mas com alguma segurança, e são nesses casos que o helpers ou plugins entram para nos ajudar. Ao invés de fazermos tudo isso dentro das views, podemos fazer em uma classe separada e apenas chamar seus métodos na view como se fossem plugins.
Criando um View Helper
Primeiro ponto que devemos ter em mente é que todo View Helper deve implementar a interface Zend\View\Helper\HelperInterface ou herdar da classe Zend\View\Helper\AbstractHelper, que por sua vez já implementa a interface comentada.
Vamos usar como exemplo um View Helper que implemente a interface HelperInterface.
namespace Application\ViewHelper;
use Zend\View\Helper\HelperInterface;
use Zend\View\Renderer\RendererInterface as Renderer;
classMyViewHelperimplements HelperInterface
{
/**
* __invoke
*
* @access public
* @return HelperInterface
*/
publicfunction__invoke()
{
return$this;
}
/**
* View object
*
* @var Renderer
*/
protected$view=null;
/**
* Set the View object
*
* @param Renderer $view
* @return AccessViewHelper
*/
publicfunctionsetView(Renderer $view)
{
$this->view=$view;
return$this;
}
/**
* Get the view object
*
* @return null|Renderer
*/
publicfunctiongetView()
{
return$this->view;
}
}
|
Poderíamos estar inserindo qualquer método dentro do nosso plugin além desses que a interface nos impoem.
Chamando o plugin em uma view
Isso não é o suficiente para que possamos chamá-lo nas views de modo direto ou sem precisar instanciar. Para isso temos que ir ao documento Module.php e no método getViewHelperConfig() criarmos nosso plugin dentro do vetor de retorno desse método.
publicfunctiongetViewHelperConfig()
{
returnarray(
‘factories’=>array(
‘MyViewHelper’=>function ($sm) {
$viewHelper=new ViewHelper\MyViewHelper();
return$viewHelper;
},
),
);
}
|
Veja que, se em algum momento precisarmos do ServiceManager dentro do nosso plugin para que ele faça uso de Model ou outro componente, será possível passar a variável $sm por parâmetro ao construtor.
Feito isso, podemos ir a uma view qualquer e chamar nosso plugin dessa maneira: $this->MyViewHelper(). E caso queiramos executar um método interno desse plugin basta escrever o comando: $this->MyViewHelper()->umMetodoQualquer().
Vamos criar um exemplo completo.
ViewHelper
namespace Application\ViewHelper;
use Zend\View\Helper\AbstractHelper;
use Zend\View\Renderer\RendererInterface as Renderer;
classMyViewHelperextends AbstractHelper
{
/**
* Sum method
*/
publicfunctionsum($a, $b)
{
return$this;
}
/**
* View object
*
* @var Renderer
*/
protected$view=null;
/**
* Set the View object
*
* @param Renderer $view
* @return AccessViewHelper
*/
publicfunctionsetView(Renderer $view)
{
$this->view=$view;
return$this;
}
/**
* Get the view object
*
* @return null|Renderer
*/
publicfunctiongetView()
{
return$this->view;
}
}
|
Module.php
publicfunctiongetViewHelperConfig()
{
returnarray(
‘factories’=>array(
‘myViewHelper’=>function ($sm) {
$viewHelper=new ViewHelper\MyViewHelper();
return$viewHelper;
},
),
);
}
|
View
echo $this->myViewHelper()->sum(2,2); ?>
|
Exibido: 4
|