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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top