首頁 > php框架 > YII > 主體

yii框架怎麼定義路由

(*-*)浩
發布: 2019-12-11 11:47:48
原創
3842 人瀏覽過

yii框架怎麼定義路由

路由與URL產生

#當一個YII應用程式開始處理一個請求的時候,它首先要做的便是將請求的URL轉換成一個路由。路由的作用是用於後續實例化對應的控制器和操作,以便處理請求,整個處理過程便叫做路由。                      (建議學習:yii架構

路由的逆過程叫做URL生成,指用來給予的路由與參數資訊來產生一個URL。當使用產生的URL來發出請求的時候,路由處理的過程又能夠再次將其解析還原出原始的路由和參數資訊。

主要負責路由和URL產生工作的是URL管理器,其被註冊成為應用程式元件。 URL管理員提供方法parseRequest()來解析請求,解析出其中的路由和參數資訊。

而方法 createUrl() 用於將給定的路由和參數訊息,產生一個URL。透過在應用程式設定中設定URL管理器,可以讓你的應用程式能夠辨識任意的URL格式,而不用修改已有程式碼。例如,你能使用如下的程式碼來產生一個URL。

use yii\helpers\Url;
// Url::to() calls UrlManager::createUrl() to create a URL
$url = Url::to(['post/view', 'id' => 100]);
登入後複製

#取決於URL管理器的配置,如上程式碼產生的URL的樣子看起來像下面這樣的。假如這個URL後續被請求的話,它將被解析成上面的原始路由和參數資訊。

/index.php?r=post/view&id=100
/index.php/post/100
/posts/100
登入後複製

URL格式 

URL管理器支援兩種URL格式:預設URL格式和漂亮URL格式。預設URL格式使用一個查詢參數r傳遞路由,其他參數按照正常方式放在URL。

例如,URL /index.php?r=post/view&id=100 的路由為post/view和參數id為100。預設URL格式並不要求對URL管理器做任何配置。

漂亮的URL格式是使用額外的路徑跟在入口腳本名稱之後,來展現路由和相關參數。

例如,URL /index.php/post/100的額外路徑為/post/100,其展現出的路由為post/view和參數id為100。

如果要使用這種URL格式,你需要依照實際需求,設計一個URL規則集。你可以透過修改URL管理器中屬性enablePrettyUrl的值,來達到這兩種URL格式之間切換的目的。

路由

路由的工作可以分成兩個步驟:

1.從請求中解析出一個路由和相關參數;

2.根據路由產生回應的控制器操作,來處理該請求。

使用預設URL格式的時候,解析出路由很簡單,只要取得參數r的值便可;

當使用漂亮URL格式的時候,URL管理器會偵測URL規則集,從中找出與該請求相符的路由。如果找不到規則與之匹配,將會拋出異常yii\web\NotFoundHttpException。

一旦從請求中解析出路由,接下來要做的就是建立與該路由相關的控制器操作。路由被斜線切割成幾個部分,例如,site/index會被切割成site和index。

每個部分都是一個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,表示路由處理失敗。

以上是yii框架怎麼定義路由的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
yii
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!