código comum Zend Framework para todos os controladores
-
20-08-2019 - |
Pergunta
Eu tenho um botão de login no cabeçalho do site. html deste cabeçalho é programado em vista Zend Framework / layouts / home.phtml.
Eu tenho um formulário escondido neste layout que é desencadeada por jQuery thickbox integração exibição de conteúdo em linha. Razão, eu não quero fazer uma chamada ajax para apenas pegar um formulário de login pequena.
Eu criar o formulário usando Zend_Form e o problema é que eu tenho que fazê-lo em todos os controladores depois de verificar se o usuário está logado ou não. Eu quero colocar esta geração formulário em um único lugar, digamos, em inicialização e depois ter uma lógica na inicialização para dizer que se o usuário está logado Não gerar o formulário.
Eu não sei se de inicialização é o lugar certo para fazê-lo ou devo fazê-lo em algum outro lugar.
Então, onde eu deveria instanciar o formulário para que seu disponível em todos os lugares se o usuário não está logado.
Solução 3
Eu fiz isso de uma maneira diferente, extendingZend_Controller_Plugin_Abstract
para implementar um plug-in e registrá-lo com o controlador de frente.
public function routeStartup(Zend_Controller_Request_Abstract $request) { }
gerado a forma no interior do método acima mencionado e definindo a forma em $ objecto vista.
$ view pode ser retrived usando:
$view = Zend_Layout :: getMvcInstance()->getView();
Outras dicas
Criar seu próprio controlador de base que se estende Zend_Controller_Action então ter seus controladores estender fora do seu controlador de base. Eu não sei o que "jQuery thickbox integração exibição em linha de conteúdo" é ... mas você tem várias seções que você pode colocá-lo em função quando você precisar do seu código seja executado. init (), preDispatch (), postDispatch () etc ... Apenas certifique-se quando você estender o seu controlador de base que você faz sthing como:
parent :: init () pai :: preDispatch () pai :: postDispatch () etc ... dentro de cada seção para que o código de base corre bem ...
Tenha cuidado com a solução da Pradeep Sharma (a resposta que ele escreveu-se e aceito abaixo).
Todo o código de código abaixo é para ZF 1,12, e não ZF 2.0
Na inicialização, instância MVC de Zend_Layout pode não ter sido criado ainda. Você deve usar Zend_Layout::startMvc()
vez:
$view = Zend_Layout::startMvc()->getView() ;
E tbh eu prefiro executar este código na função preDispatch (). Novos usuários de ZF pode estar interessado neste:
application / plugins / HeaderForm.php:
class Application_Plugin_HeaderForm extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$view = Zend_Layout::startMvc()->getView() ;
$view->headerForm = new Application_Form_HeaderForm() ;
}
}
Chamar nova Application_Form_HeaderForm()
vai autoLoad por padrão em / pasta aplicativo de formulários /. Você também pode criar o formulário diretamente para o plugin com new Zend_Form()
e addElement()
etc., mas não vai ser reutilizável.
Claro, você precisa registrar este plugin em seu bootstrap!
application / Bootstrap.php:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initPlugin()
{
$front = Zend_Controller_Front::getInstance() ;
$front->registerPlugin(new Application_Plugin_HeaderForm()) ;
}
}
Chamar nova Application_Plugin_HeaderForm()
vai autoLoad por padrão em application / plugins / pasta ??p>