搜尋

  ZendMvcMvcEvent繼承自ZendEventManagerEvent,在ZendMvcApplication::bootstrap()執行時觸發。如果你的控制器實作了ZendMvcInjectApplicationEventInterface,MvcEvent將會被注入到這些控制器中。

  MvcEvent會為下列物件新增擷取器和規則:Application、Request、Response、Router、RouterMatch、Result(通常為調度控制器的結果)、ViewModel(一般展示了視圖模型佈局)。 Application、Request、Response、Router和ViewModel都是在bootstrap事件過程中註入。接下來的route事件會被注入RouteMatch對象,用來封裝routing的結果。 RouteMatch物件在整個MVC中都會使用,所以通常會透過RouteMatch取得Route、Request、Response物件。

MvcEvent也定義瞭如下方法:

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>)

事件被觸發的順序:

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 一旦所有的事情完成後,本事件觸發完成對應的任務

 

 

 

 

 

 

 

詳細介紹:

MvcEvent::EVENT_BOOTSTRAP("bootstrap")

監聽器:ZendMvcViewHttpViewManager,onBootstrap方法會被呼叫。

作用:準備好視圖層(也就是實例化ZendMvcViewHttpViewManager)。

觸發方式:ZendMvcApplication  bootstrap()方法。

 

MvcEvent::EVENT_ROUTE("route")

監聽器1:ZendMvcModuleRouteListener::onRoute

作用:決定了模組命名空間是否應該添加在控制器名字前面,主要是防止路由匹配包含的參數鍵匹配到了MODULE_NAMESPACE常數

監聽器2:ZendMvcRouteListener::onRoute  如果沒有路由沒有匹配到MvcEvent::EVENT_DISPATCH_ERROR會被觸發。

作用:嘗試將request配對到路由器,並傳回一個RouteMatch物件。

觸發方式:ZendMvcApplication::run

作用:如果路由過程中有錯誤發生,將會使用一個短迴路的回呼來停止事件持續傳播

 

MvcEvent::EVENT_DISPATCH("dispatch")

監聽器分為兩類:一類時只限於控制台環境,還有一類只限於HTTP環境,還有全壞境適用的監聽器。本文不介紹CONSOLE環境。 console環境可以查看官方文件。

類ZendMvcViewHttpCreateViewModelListener裡面有兩個函數作為此事件的監聽器:

1、createViewModelFromArray(如果控制器行為傳回一個關聯數組,則監聽器將數組轉換為一個ViewModel物件。

2、createViewModelFromNull(控制器傳回的時一個空值,則該方法將其轉換為一個ViewModel物件)

類ZendMvcViewHttpRouteNotFoundStrategy::prepareNotFoundViewModel 建立並傳回一個404ViewModel

類ZendMvcViewHttpInjectTemplateListener::injectTemplate 把一個模版註入到視圖模型中。模版名繼承自路由匹配的控制器名稱(或是控制器裡的action)

類別ZendMvcViewHttpInjectViewModelListener::injectViewModel 插入一個ViewModel並加入至MvcEvent物件。有兩種情況:a)作為子物件加入,包含view model。 b)結果可終止的情況下替換掉預設情況

類ZendMvcMiddlewareListener::onDispatch會觸發MvcEvent::EVENT_DISPATCH_ERROR,從service manager裡面載入並調度匹配到的PSR-7中間件。

類ZendMvcDispatchListener::onDispatch會觸發MvcEvent::EVENT_DISPATCH_ERROR作用同上。

類別ZendMvcControllerAbstractController::onDispatch本方法是一個抽象類別。

觸發方式:

ZendMvcApplication::run使用短迴路的回呼來終止事件的傳播。 (路由時有錯誤發生時)

ZendMvcControllerAbstractController::dispatch如果有監聽器回傳一個Response對象,將終止事件傳播。每當AbstractController監聽本事件的時候,被觸發時都會呼叫onDispatch方法。

 

MvcEvent::EVENT_RENDER("render")

監聽器:

ZendMvcViewConsoleDefaultRenderingStrategy::render 用來渲染視圖

ZendMvcViewHttpDefaultRenderingStrategy::render同樣渲染視圖,注意和上面的環境區別

觸發方式:

ZendMvcApplication::competeRequest本事件在MvcEvent::FINISH觸發前觸發。

 

MvcEvent::EVENT_FINISH("finish")

監聽器:

ZendMvcSendResponseListener::sendResponse觸發SendResponseEvent來準備response。

觸發方式:

ZendMvcApplication::run 一旦MvcEvent::ROUTE或MvcEvent::DISPATCH事件回傳了一個正確的ResponseInterface就會觸發本事件

ZendMvcApplication::completeRequest觸發在MvcEvent::RENDER之後(也就是說,此時視圖已經被渲染了)。

 

 

關於SendResponse事件

ZendMvcResponseSenderSendResponseEvent定義如下方法:

setResponse($response)

getResponse()

setContentSent()

contentSent()

setHeadersSent()

headersSent()

這些方法用來設定應答頭和應答內容。

監聽器:

ZendMvcSendResponseListenerPhpEnvironmentResponseSender::__invoke 使用環境H​​TTP

ZendMvcSendResponseListenerConsoleResponseSender::__invoke使用環境為console。

ZendMvcSendResponseListenerSimpleStreamResponseSender::__invoke

MvcEvent::FINISH事件被觸發後本事件執行

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。