Heim  >  Artikel  >  php教程  >  Zend-MVC-Ereignisse

Zend-MVC-Ereignisse

WBOY
WBOYOriginal
2016-08-04 08:53:171176Durchsuche

 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

übereinstimmt

Listener 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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn