PHP开发教程

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,会看到关于页面如下。

11.png

在这个模式下,一个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


Powered by PHP二次开发 ©2008-2017