W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
當入口腳本在調(diào)用 yii\web\Application::run() 方法時,它進行的第一個操作就是解析輸入的請求,然后實例化對應(yīng)的控制器操作處理這個請求。該過程就被稱為引導(dǎo)路由(routing)。(譯注:中文里既是動詞也是名詞)
路由引導(dǎo)的第一步,是把傳入請求解析為一個路由。如我們在?控制器(Controllers)?章節(jié)中所描述的那樣,路由是一個用于定位控制器操作的地址。這個過程通過?request
?應(yīng)用組件的 yii\web\Request::resolve() 方法實現(xiàn),該方法會調(diào)用?URL 管理器?進行實質(zhì)上的請求解析工作。
默認情況下,傳入請求會包含一個名為?r
?的?GET
?參數(shù),它的值即被視為路由。但是如果啟用 yii\web\UrlManager::enablePrettyUrl,那么在確定請求的路由時,就會進行更多處理。具體的細節(jié)請參考?URL 的解析與生成?章節(jié)。
假使某路由最終實在無法被確定,那么?request
?組件會拋出 yii\web\NotFoundHttpException 異常(譯注:大名鼎鼎的 404)。
如果傳入請求并沒有提供一個具體的路由,(一般這種情況多為于對首頁的請求)此時就會啟用由 yii\web\Application::defaultRoute 屬性所指定的缺省路由。該屬性的默認值為?site/index
,它指向?site
?控制器的?index
?操作。你可以像這樣在應(yīng)用配置中調(diào)整該屬性的值:
return [
// ...
'defaultRoute' => 'main/index',
];
catchAll
?路由(全攔截路由)有時候,你會想要將你的 Web 應(yīng)用臨時調(diào)整到維護模式,所有的請求下都會顯示相同的信息頁。當然,要實現(xiàn)這一點有很多種方法。這里面最簡單快捷的方法就是在應(yīng)用配置中設(shè)置下 yii\web\Application::catchAll 屬性:
return [
// ...
'catchAll' => ['site/offline'],
];
catchAll
?屬性需要傳入一個數(shù)組做參數(shù),該數(shù)組的第一個元素為路由,剩下的元素會(以名值對的形式)指定綁定于該操作的各個參數(shù)。
當設(shè)置了?catchAll
?屬性時,它會替換掉所有從輸入的請求中解析出來的路由。如果是上文的這種設(shè)置,用于處理所有傳入請求的操作都會是相同的?site/offline
。
一旦請求路由被確定了,緊接著的步驟就是創(chuàng)建一個“操作(action)”對象,用以響應(yīng)該路由。
路由可以用里面的斜杠分割成多個組成片段,舉個栗子,site/index
?可以分解為?site
?和?index
?兩部分。每個片段都是指向某一模塊(Module)、控制器(Controller)或操作(action)的 ID。
從路由的首個片段開始,應(yīng)用會經(jīng)過以下流程依次創(chuàng)建模塊(如果有),控制器,以及操作:
在上面的步驟里,如果有任何錯誤發(fā)生,都會拋出 yii\web\NotFoundHttpException,指出路由引導(dǎo)的過程失敗了。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: