<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 路由 當[入口腳本](http://www.yiichina.com/doc/guide/2.0/structure-entry-scripts)在調用 yii\web\Application::run() 方法時,它進行的第一個操作就是解析輸入的請求,然后實例化對應的[控制器操作](http://www.yiichina.com/doc/guide/2.0/structure-controllers)處理這個請求。該過程就被稱為**引導路由(routing)**。(譯注:中文里既是動詞也是名詞) ## 解析路由 路由引導的第一步,是把傳入請求解析為一個路由。如我們在?[控制器(Controllers)](http://www.yiichina.com/doc/guide/2.0/structure-controllers#routes)?章節中所描述的那樣,路由是一個用于定位控制器操作的地址。這個過程通過?`request`?應用組件的 yii\web\Request::resolve() 方法實現,該方法會調用?[URL 管理器](http://www.yiichina.com/doc/guide/2.0/runtime-url-handling)?進行實質上的請求解析工作。 默認情況下,傳入請求會包含一個名為?`r`?的?`GET`?參數,它的值即被視為路由。但是如果啟用 yii\web\UrlManager::enablePrettyUrl,那么在確定請求的路由時,就會進行更多處理。具體的細節請參考?[URL 的解析與生成](http://www.yiichina.com/doc/guide/2.0/runtime-url-handling)?章節。 假使某路由最終實在無法被確定,那么?`request`?組件會拋出 yii\web\NotFoundHttpException 異常(譯注:大名鼎鼎的 404)。 ### 缺省路由 如果傳入請求并沒有提供一個具體的路由,(一般這種情況多為于對首頁的請求)此時就會啟用由 yii\web\Application::defaultRoute 屬性所指定的缺省路由。該屬性的默認值為?`site/index`,它指向?`site`?控制器的?`index`?操作。你可以像這樣在應用配置中調整該屬性的值: ~~~ return [ // ... 'defaultRoute' => 'main/index', ]; ~~~ ### `catchAll`?路由(全攔截路由) 有時候,你會想要將你的 Web 應用臨時調整到維護模式,所有的請求下都會顯示相同的信息頁。當然,要實現這一點有很多種方法。這里面最簡單快捷的方法就是在應用配置中設置下 yii\web\Application::catchAll 屬性: ~~~ return [ // ... 'catchAll' => ['site/offline'], ]; ~~~ `catchAll`?屬性需要傳入一個數組做參數,該數組的第一個元素為路由,剩下的元素會(以名值對的形式)指定綁定于該操作的各個參數。 當設置了?`catchAll`?屬性時,它會替換掉所有從輸入的請求中解析出來的路由。如果是上文的這種設置,用于處理所有傳入請求的操作都會是相同的?`site/offline`。 ## 創建操作 一旦請求路由被確定了,緊接著的步驟就是創建一個“操作(action)”對象,用以響應該路由。 路由可以用里面的斜杠分割成多個組成片段,舉個栗子,`site/index`?可以分解為?`site`?和?`index`?兩部分。每個片段都是指向某一模塊(Module)、控制器(Controller)或操作(action)的 ID。 從路由的首個片段開始,應用會經過以下流程依次創建模塊(如果有),控制器,以及操作: 1. 設置應用主體為當前模塊。 2. 檢查當前模塊的 yii\base\Module::controllerMap 是否包含當前 ID。如果是,會根據該表中的配置創建一個控制器對象,然后跳到步驟五執行該路由的后續片段。 3. 檢查該 ID 是否指向當前模塊中 yii\base\Module::modules 屬性里的模塊列表中的一個模塊。如果是,會根據該模塊表中的配置創建一個模塊對象,然后會以新創建的模塊為環境,跳回步驟二解析下一段路由。 4. 將該 ID 視為控制器 ID,并創建控制器對象。用下個步驟解析路由里剩下的片段。 5. 控制器會在他的 yii\base\Controller::actions()里搜索當前 ID。如果找得到,它會根據該映射表中的配置創建一個操作對象;反之,控制器則會嘗試創建一個與該 ID 相對應,由某個 action 方法所定義的行內操作(inline action)。 在上面的步驟里,如果有任何錯誤發生,都會拋出 yii\web\NotFoundHttpException,指出路由引導的過程失敗了。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看