Frage

Ich habe einen Login-Button in der Kopfzeile der Webseite. Dieser HTML-Header ist so programmiert, in Zend Framework Ansichten / Layout / home.phtml.

Ich habe eine versteckte Form in diesem Layout, das von jQuery thickbox Inline-Inhaltsanzeige Integration ausgelöst wird. Grund, ich möchte nicht einen Ajax-Aufruf machen, um nur eine kleine Anmeldeformular zu holen.

Ich schaffe das Formular mit Zend_Form und das Problem ist, dass ich es in allen Controllern nach dem Einchecken zu tun haben, wenn der Benutzer angemeldet ist oder nicht. Ich möchte in einem einzigen Ort, um diese Form Generation platzieren, sagt in Bootstrap und hat dann eine Logik in Bootstrap zu sagen, dass, wenn der Benutzer in Sie nicht protokolliert wird, um die Form zu erzeugen.

Ich weiß nicht, ob Bootstrap der richtige Ort ist, dies zu tun, oder soll ich es an einem anderen Ort zu tun.

Also, wo soll ich das Formular instanziiert, so dass seine überall verfügbar, wenn der Benutzer nicht angemeldet ist.

War es hilfreich?

Lösung 3

Ich tat es auf eine andere Weise, extendingZend_Controller_Plugin_Abstract ein Plugin zu implementieren und mit Front-Controller registrieren.

public function routeStartup(Zend_Controller_Request_Abstract $request) { } 

erzeugte die Form innerhalb des oben genannten Verfahrens und durch die Form in $ view Objekt einstellen.

$ view kann retrived mit:

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

Andere Tipps

Ihre eigenen Basis-Controller erstellen, die sich Zend_Controller_Action dann haben Ihre Controller aus Ihren Basis-Controller erweitern. Ich weiß nicht, was „jQuery thickbox Inline-Inhaltsanzeige Integration“ ist ... aber Sie haben mehrere Abschnitte, die Sie es in Abhängigkeit setzen können, wenn Sie Ihren Code ausführen müssen. init (), preDispatch (), postdispatch () etc ... So stellen Sie sicher, wenn Sie Ihre Basis-Controller erweitern ab, die Sie sthing wie:

parent :: init () parent :: preDispatch () parent :: postdispatch () etc ... in jedem Abschnitt, so dass die Code-Basis läuft auch ...

Seien Sie vorsichtig über Pradeep Sharma-Lösung (die Antwort, die er selbst schrieb und unter akzeptiert).

der Code Code unten Alles ist für ZF 1.12 und nicht ZF 2.0

In der Bootstrap, Zend_Layout MVC-Instanz möglicherweise noch nicht erstellt worden ist. Sie sollten Zend_Layout::startMvc() verwenden stattdessen:

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

Und TBH ziehe ich diesen Code in der preDispatch () Funktion ausführt. Neue Benutzer von ZF könnten daran interessiert sein:

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

Beim neuen Application_Form_HeaderForm() wird automatisch geladen standardmäßig in application / forms / Ordner. Sie können das Formular auch direkt in das Plugin mit new Zend_Form() erstellen und addElement() usw., aber es wird nicht wiederverwendbar sein.

Natürlich müssen Sie dieses Plugin in der Bootstrap registrieren!

application / Bootstrap.php:

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

Beim neuen Application_Plugin_HeaderForm() wird automatisch geladen standardmäßig in application / plugins / Ordner

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top