Pregunta

Tengo un botón de inicio de sesión en el encabezado de la página web.Este encabezado html está programado en Zend framework views/layouts/home.phtml.

Tengo un formulario oculto en este diseño que se desencadena por jQuery thickbox en línea el contenido de la pantalla de la integración.La razón, no quiero hacer una llamada ajax sólo la obtención de un pequeño formulario de inicio de sesión.

Puedo crear el formulario con Zend_Form y el problema es que tengo que hacerlo en todos los controladores después de comprobar si el usuario está logueado o no.Quiero colocar este formulario de generación en un solo lugar, decir que en bootstrap y, a continuación, tiene una lógica en bootstrap para decir que si el usuario se registra en la que no generan el formulario.

No sé si bootstrap es el lugar adecuado para hacerlo o debo hacerlo en algún otro lugar.

Así que, ¿dónde tengo que crear una instancia del formulario, a fin de que esté disponible en todas partes si el usuario no está conectado.

¿Fue útil?

Solución 3

Lo hice de una manera diferente, extendiendo Zend_Controller_Plugin_Abstract para implementar un complemento y registrarlo con el controlador frontal.

public function routeStartup(Zend_Controller_Request_Abstract $request) { } 

generó el formulario dentro del método mencionado anteriormente y configurando el formulario en el objeto $ view.

$ view se puede recuperar usando:

$view = Zend_Layout :: getMvcInstance()->getView();

Otros consejos

Cree su propio controlador base que extienda Zend_Controller_Action y luego haga que sus controladores se extiendan fuera de su controlador base. No sé qué & "; JQuery thickbox integración de visualización de contenido en línea &"; es ... pero tiene varias secciones en las que puede ponerlas dependiendo de cuándo necesite ejecutar su código. init (), preDispatch (), postDispatch () etc ... Solo asegúrese de que cuando extienda su controlador base haga algo como:

parent :: init () parent :: preDispatch () parent :: postDispatch () etc ... dentro de cada sección para que el código base también se ejecute ...

Tenga cuidado acerca de Pradeep Sharma de la solución (la respuesta que él escribió a sí mismo y aceptada por debajo).

Todo el código siguiente código es para ZF 1.12, y no ZF 2.0

En el bootstrap, Zend_Layout del MVC instancia no podría haber sido creado aún.Usted debe utilizar Zend_Layout::startMvc() lugar :

$view = Zend_Layout::startMvc()->getView() ;

Y tbh prefiero la ejecución de este código en el preDispatch() función.Los nuevos usuarios de ZF podría estar interesado en esto :

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() ;
    }
}

Llamar a nuevos Application_Form_HeaderForm() se autoload por defecto en aplicación/formas/ carpeta.También puede crear el formulario directamente en el plugin con new Zend_Form(), y addElement() etc.pero no va a ser reutilizables.

Por supuesto, usted necesita para registrar este plugin en su arranque!

application/Bootstrap.php :

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initPlugin()
    {
        $front = Zend_Controller_Front::getInstance() ;
        $front->registerPlugin(new Application_Plugin_HeaderForm()) ;
    }
}

Llamar a nuevos Application_Plugin_HeaderForm() se autoload por defecto en aplicación/plugins/ carpeta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top