Yii URL規則

URL規則是 yii\web\UrlRule 的一個實例。當啟用prettyURL格式,urlManager組件使用其規則屬性聲明URL規則。
要解析請求,URL管理器取得它們的聲明,並按順序查找第一個規則。
第1步- 修改 config/web.php 檔中的urlManager 組件。
'urlManager' => [
   'showScriptName' => false,
   'enablePrettyUrl' => true,
   'rules' => [
      'about' => 'site/about',
   ]
],
第2步 - 打開Web流覽器訪問:http://localhost:8080/about,會看到關於頁面如下。
Yii URL規則
在這個模式下,一個URL規則可以與查詢參數相關聯-

<ParamName:RegExp>, 這裏 −

  • ParamName −參數名稱

  • RegExp − 可選的正則運算式用於匹配參數值

假設,我們已經聲明如下URL規則 -
[
   'articles/<year:\d{4}>/<category>' => 'article/index',
   'articles' => 'article/index',
   'article/<id:\d+>' => 'article/view',
]
當規則用於解析 -
  • /index.php/articles 被解析成 article/index
  • /index.php/articles/2014/php 被解析成 article/index
  • /index.php/article/100 被解析成 article/view
  • /index.php/articles/php 被解析成 articles/php
當規則被用於創建的URL -
  • Url::to(['article/index']) 創建成 /index.php/articles

  • Url::to(['article/index', 'year' => 2016, 'category' => 'php']) 創建成 /index.php/articles/2016/php

  • Url::to(['article/view', 'id' => 100]) 創建成/index.php/article/100

  • Url::to(['article/view', 'id' => 100, 'source' => 'ad']) 創建成/index.php/article/100?source=ad

  • Url::to(['article/index', 'category' => 'php']) 創建成 /index.php/article/index?category=php

在urlManager的使用上,用得最多的配置項就是:

  • $enablePrettyUrl ,是否開啟URL美化功能。關於美化功能,我們在 路由(Route) 部分已經介紹過了。 注意如果 $enablePrettyUrl 不開啟,表明使用原始的格式,那麼所有路由規則都是無效的。
  • $showScriptName ,是否在URL中顯示入口腳本。是對美化功能的進一步補充。
  • suffix 設置一個 .html 之類的假尾碼,是對美化功能的進一步補充。
  • rules 保存路由規則們的聲明,注意並非保存其實例。
  • $enableStrictParsing 是否開啟嚴格解析。該選項僅在開啟美化功能後生效。在開啟嚴格解析模式時, 所有請求必須匹配 $rules[] 所聲明的至少一個路由規則。 如果未開啟,請求的PATH_INFO部分將作為所請求的路由進行後續處理。

在 UrlManager::init() 初始化過程中,可以發現 urlManager 使用了應用所提供的緩存組件(有果有的話), 對所有路由規則的實例進行緩存。

yii\web\UrlManager::$suffix 
第3步 - 在 config/web.php 檔修改 urlComponent 組件配置。
'urlManager' => [
   'showScriptName' => false,
   'enablePrettyUrl' => true,
   'enableStrictParsing' => true,
   'suffix' => '.html'
],
第4步- 在Web流覽器地址欄鍵入URL地址訪問:http://localhost:8080/site/contact.html 查看結果,注意這裏尾碼是:.html


上一篇: Yii URL路由 下一篇: Yii HTML表單處理