Zend controller die predispatch-Methode
Las ich diese zu verstehen, zend MVC-Request-Lebenszyklus.
Aber ich kann nicht glauben, auf alle Fälle im zend, wo ich mit einem controller der predispatch-Methode , nicht die Methode init genug für den code, den ich ausgeführt werden soll, bevor der controller die Aktionen .
Sollte was genau sollte in eine predispatch controller und nicht init .
Können Sie ein Beispiel geben ?
- Eine lange, lange Zeit, seit ich geschrieben habe, einer Zend-Anwendung (somit kann hier ein Kommentar und keine Antwort), aber die erste Sache, die kommt sich zu kümmern, ist, wenn Sie hatte eine Authentifizierung Helfer war sicher, dass der Benutzer über die Berechtigung zum Zugriff auf den controller.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehen Zend_Controller_Action - Objekt-Initialisierung und dem folgenden Abschnitt Pre-und Post Dispatch Hooks. Sie beide gehen in einigen Details über die beiden, und die Action-Controller selbst.
init()
ist mehr für den Aufbau des controller-Objekts und das tun Initialisierung, die verfügbar sein wird auf alle Ihre Aktionen. Dainit()
läuft vorpreDispatch()
, was Sie setzen ininit()
verfügbar sein wird fürpreDispatch()
zu verwenden. Zwar ist es möglich, weiterleiten oder umleiten voninit()
ist es am besten, es zu tun, auspreDispatch()
da läuft vor der Ausführung des controller-Aktion.Aus der Anleitung:
erweitern drew010 die Antwort hier ist ein Beispiel, wie ich preDispatch() und int():
Benutze ich preDispatch (), um das layout für jede Aktion, wie es nicht dem Standard-layout und in init() Initialisiere ich meine flash-messenger und setup der session Namensraum für diesen controller und initialisiert die Sitzung als eine Eigenschaft.
Hier ist ein beliebter Punkt, wo Sie können überflüssige Belastungen von Ressourcen mithilfe von init() anstelle von preDispatch(): wenn Sie access control verwenden von controller-plugin der preDispatch () - Methode rufen Sie dann Reihenfolge: YourController::init(), YourAccessPlugin::preDispatch(), YourController::preDispatch(), YourController::whateverAction. Dies bedeutet, dass, wenn Sie schweres zu heben, die in init() dann nicht autorisierte Benutzer auslösen können, es. Sagen, dass du z.B. eine neue Sitzung starten namespace in der init () - dann sinnlosen such-bots verursachen können Ihre session-Datenbank übersät mit leeren Sitzungen. Also halten Sie sich an sehr einfache einfache Sachen in init, vermeiden Sie ein berühren oder ändern von Ressourcen, die Vermeidung von Datenbank-Zugriff.