ZendMvcMvcEvent erbt von ZendEventManagerEvent und wird ausgelöst, wenn ZendMvcApplication::bootstrap() ausgeführt wird. Wenn Ihre Controller ZendMvcInjectApplicationEventInterface implementieren, wird MvcEvent in diese Controller eingefügt.
MvcEvent fügt Getter und Regeln für die folgenden Objekte hinzu: Anwendung, Anforderung, Antwort, Router, RouterMatch, Ergebnis (normalerweise das Ergebnis des Versendens des Controllers), ViewModel (zeigt im Allgemeinen das Layout des Ansichtsmodells an). Anwendung, Anfrage, Antwort, Router und ViewModel werden alle während des Bootstrap-Ereignisprozesses eingefügt. Das nächste Routenereignis wird in das RouteMatch-Objekt eingefügt, um die Routing-Ergebnisse zu kapseln. RouteMatch-Objekte werden im gesamten MVC verwendet, daher werden Route-, Request- und Response-Objekte normalerweise über RouteMatch abgerufen.
MvcEvent definiert außerdem die folgenden Methoden:
setApplication(<span style="color: #800080;">$application</span><span style="color: #000000;">) getApplication() setRequest(</span><span style="color: #800080;">$request</span><span style="color: #000000;">) getRequest() setResponse(</span><span style="color: #800080;">$reponse</span><span style="color: #000000;">) getResponse() setRouter(</span><span style="color: #800080;">$router</span><span style="color: #000000;">) getRouter() setRouteMatch(</span><span style="color: #800080;">$routeMatch</span><span style="color: #000000;">) getRouteMatch() setResult() getResult() setViewModel(</span><span style="color: #800080;">$viewModel</span><span style="color: #000000;">) getViewModel() isError() setError() getError() getController() setController(</span><span style="color: #800080;">$name</span><span style="color: #000000;">) getControllerClass() setControllerClass(</span><span style="color: #800080;">$class</span>)
Die Reihenfolge, in der Ereignisse ausgelöst werden:
Name | Constant | Description |
bootstrap | MvcEvent::EVENT_BOOTSTRAP | 通过创建ViewManager来引导application |
route | MvcEvent::EVENT_ROUTE | 执行路由(或者路由相关的行为) |
dispatch | MvcEvent::EVENT_DISPATCH | 将匹配到的路由调度给相应的控制器/行为 |
dispatch.error | MvcEvent::EVENT_DISPATCH_ERROR | 当调度过程中发生错误时会被触发 |
render | MvcEvent::EVENT_RENDER | 准备数据并将渲染任务委托给视图层 |
render.error | MvcEvent::EVENT_RENDER_ERROR | render过程错误发生时触发 |
finish | MvcEvent::EVENT_FINISH | 一旦所有的事情完成后,本事件触发完成相应的任务 |
Detaillierte Einführung:
MvcEvent::EVENT_BOOTSTRAP("bootstrap")
Listener: ZendMvcViewHttpViewManager, die onBootstrap-Methode wird aufgerufen.
Funktion: Bereiten Sie die Ansichtsebene vor (dh instanziieren Sie ZendMvcViewHttpViewManager).
Trigger-Methode: ZendMvcApplication Bootstrap()-Methode.
MvcEvent::EVENT_ROUTE("route")
Listener 1: ZendMvcModuleRouteListener::onRoute
Funktion: bestimmt, ob der Modul-Namespace vor dem Controller-Namen hinzugefügt werden soll, hauptsächlich um zu verhindern, dass der im Routenvergleich enthaltene Parameterschlüssel mit der MODULE_NAMESPACE-Konstante
übereinstimmtListener 2: ZendMvcRouteListener::onRoute Wenn es keine passende Route gibt, wird MvcEvent::EVENT_DISPATCH_ERROR ausgelöst.
Funktion: Versuchen Sie, die Anfrage dem Router zuzuordnen und ein RouteMatch-Objekt zurückzugeben.
Trigger-Methode: ZendMvcApplication::run
Funktion: Wenn während des Routing-Prozesses ein Fehler auftritt, wird ein kurzer Schleifenrückruf verwendet, um die kontinuierliche Ausbreitung von Ereignissen zu stoppen.
MvcEvent::EVENT_DISPATCH("dispatch")
Listener sind in zwei Kategorien unterteilt: Eine ist auf die Konsolenumgebung beschränkt, die andere ist auf die HTTP-Umgebung beschränkt, und es gibt Listener, die für alle Umgebungen gelten. In diesem Artikel wird die CONSOLE-Umgebung nicht vorgestellt. Informationen zur Konsolenumgebung finden Sie in der offiziellen Dokumentation.
Es gibt zwei Funktionen in der Klasse ZendMvcViewHttpCreateViewModelListener als Listener für dieses Ereignis:
1. createViewModelFromArray (wenn die Controller-Aktion ein assoziatives Array zurückgibt, konvertiert dieser Listener das Array in ein ViewModel-Objekt.
2. createViewModelFromNull (wenn der Controller einen Nullwert zurückgibt, konvertiert diese Methode ihn in ein ViewModel-Objekt)
Klasse ZendMvcViewHttpRouteNotFoundStrategy::prepareNotFoundViewModel erstellt ein 404ViewModel und gibt es zurück
Klasse ZendMvcViewHttpInjectTemplateListener::injectTemplate Fügt eine Vorlage in das Ansichtsmodell ein. Der Vorlagenname wird vom Controllernamen geerbt, der mit der Route (oder der Aktion im Controller) übereinstimmt
Klasse ZendMvcViewHttpInjectViewModelListener::injectViewModel Fügt ein ViewModel ein und fügt es dem MvcEvent-Objekt hinzu. Es gibt zwei Situationen: a) Als untergeordnetes Objekt hinzugefügt, einschließlich Ansichtsmodell. b) Ersetzen Sie die Standardsituation, wenn das Ergebnis beendet werden kann
Die Klasse ZendMvcMiddlewareListener::onDispatch löst MvcEvent::EVENT_DISPATCH_ERROR aus und lädt und versendet die passende PSR-7-Middleware vom Service Manager.
Die Klasse ZendMvcDispatchListener::onDispatch löst MvcEvent::EVENT_DISPATCH_ERROR aus, was den gleichen Effekt wie oben hat.
Klasse ZendMvcControllerAbstractController::onDispatch Diese Methode ist eine abstrakte Klasse.
Trigger-Methode:
ZendMvcApplication::run verwendet einen kurzen Schleifenrückruf, um die Ereignisweitergabe zu beenden. (Wenn beim Routing ein Fehler auftritt)
ZendMvcControllerAbstractController::dispatch beendet die Ereignisweitergabe, wenn ein Listener ein Response-Objekt zurückgibt. Immer wenn AbstractController dieses Ereignis abhört, wird bei Auslösung die onDispatch-Methode aufgerufen.
MvcEvent::EVENT_RENDER("render")
Zuhörer:
ZendMvcViewConsoleDefaultRenderingStrategy::render wird zum Rendern von Ansichten verwendet
ZendMvcViewHttpDefaultRenderingStrategy::render rendert auch die Ansicht, bitte beachten Sie den Unterschied zur obigen Umgebung
Trigger-Methode:
ZendMvcApplication::competeRequest Dieses Ereignis wird ausgelöst, bevor MvcEvent::FINISH ausgelöst wird.
MvcEvent::EVENT_FINISH("finish")
Zuhörer:
ZendMvcSendResponseListener::sendResponse löst SendResponseEvent aus, um die Antwort vorzubereiten.
Trigger-Methode:
ZendMvcApplication::run Dieses Ereignis wird ausgelöst, sobald das Ereignis MvcEvent::ROUTE oder MvcEvent::DISPATCH ein korrektes ResponseInterface zurückgibt
ZendMvcApplication::completeRequest wird nach MvcEvent::RENDER ausgelöst (d. h. die Ansicht wurde zu diesem Zeitpunkt gerendert).
Über das SendResponse-Ereignis
ZendMvcResponseSenderSendResponseEvent definiert die folgenden Methoden:
setResponse($response)
getResponse()
setContentSent()
contentSent()
setHeadersSent()
headersSent()
Diese Methoden werden zum Festlegen von Antwortheadern und Antwortinhalten verwendet.
Zuhörer:
ZendMvcSendResponseListenerPhpEnvironmentResponseSender::__invoke Umgebung HTTP verwenden
ZendMvcSendResponseListenerConsoleResponseSender::__invoke verwendet die Konsolenumgebung.
ZendMvcSendResponseListenerSimpleStreamResponseSender::__invoke
MvcEvent::Dieses Ereignis wird ausgeführt, nachdem das FINISH-Ereignis ausgelöst wurde