作者:佩刚坤斌冠如_567 | 来源:互联网 | 2013-06-09 10:29
Package system.web
Since 1.0
Source Code framework/web/CUrlManager.php
[ 说明 ]
CUrlManager 负责管理 Yii 应用程序的 URL。
它提供 URL 的构建( createUrl() )和解析( parseUrl() )功能。
通过设置 urlFormat 属性,CUrlManager 管理的 URL 可以是以下两种格式之一:
'path' 格式: /path/to/EntryScript.php/name1/value1/name2/value2...
'get' 格式: /path/to/EntryScript.php?name1=value1&name2=value2...
当使用 'path' 格式时,CUrlManager 使用一组规则以实现:
解析 URL 地址为路由为 ('ControllerID/ActionID') 格式并获取参数
基于给定的路由规则和参数创建 URL
规则由路由和正则构成。CUrlManager 使用后者来决定使用何种规则来解析和创建 URL。模式用来匹配 URL 的路径信息部分。它可以使用形如 '
' 的格式来包含指定的参数。
解析 URL 时,匹配的规则将从路径信息中提取出指定的参数并且将这些数值赋给 $_GET 变量;当创建 URL 时,匹配的规则将从 $_GET 变量中收集参数并将他们放到 URL 的路径信息中。
如果正则以 '/*' 结尾,意味着附加的 GET 参数可能会被添加到 URL 的路径信息中;否则,GET 参数只能出现在路径信息部分。
要指定 URL 规则,设定规则属性数组( pattern => route ), 例如:
1
2
3
4
|
array(
'articles'=>'article/list',
'article//*'=>'article/read',
)
|
上面指定了两条规则:
第一条规则指的是,如果访问者请求 '/path/to/index.php/articles' 这个地址,那么将视为请求 '/path/to/index.php/article/list';反过来, 创建URL时也适用。
第二条规则包含了一个通过 '' 语法指定的参数 'id', 它的意思是,当访问者请求 '/path/to/index.php/article/13' 这个地址,那么将视为请求 '/path/to/index.php/article/read?id=13' 这个地址;反过来, 创建URL时也适用。
从版本 1.0.5 起,路由部分可以包含正则部门的引用。这允许一个规则根据匹配条件的不用,适用不同的路由。例如,
1
2
3
4
5
|
array(
'<_c:(post|comment)>//<_a:(create|update|delete)>'=>'<_c>/<_a>',
'<_c:(post|comment)>/'=>'<_a>/view',
'<_c:(post|comment)>s/*'=>'<_a>/list',
)
|
上面我们在路由部分使用了两个指定的参数 '<_a>' 和 '<_c>','<_c>' 参数匹配 'post' 或者 'comment', 而 '<_a>' 参数匹配 action Id.
和标准规则一样,这些规则可以被用来解析和生成 URL。例如,使用上面的规则,URL '/index.php/post/123/create' 将被解析为 'post/create' 路由和值为 123 的 'id' GET 参数。给定路由参数 'post/list' 和值为 2 的 'page' 参数,我们将得到 '/index.php/posts/page/2' 这个 URL。
从 1.0.11 版本开始,规则中还可以包含主机名来解析和创建 URL。有人可能希望将主机名转化为 GET 参数,例如:http://admin.example.com/en/profile 可以解析称 GET 参数 user=admin 与 lang=en;另一方面,规则也可以用来生成包含参数化的主机名的 URL。
想要使用参数化的主机名,仅仅需要使用主机信息声明 URL 规则,例如:
1
2
3
|
array(
' http://.example.com//profile'=>'user/profile',
)
|
CUrlManager 是一个默认的应用程序组件,可以通过 CWebApplication::getUrlManager() 方法进行访问。