首页 >后端开发 >php教程 >yii框架中的Url生产问题小结_PHP

yii框架中的Url生产问题小结_PHP

WBOY
WBOY原创
2016-06-01 12:13:401039浏览
复制代码 代码如下:



假定设定了UrlManager的配置为Path模式,用yii默认的配置:
复制代码 代码如下:
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
'/'=>'/view',
'//'=>'/',
'/'=>'/',
),
),

上面两行代码会生产什么样的链接地址?
http:///user/register //错误链接
http:///index.php/user/register //正确链接
第一个链接是错误的,浏览器会返回404错误。第二个链接会访问UserController的Register方法。区别就在于第二个链接在生成的时候我们传入的参数是一个array数组,而第一个方法是一个简单字符串。Yii在处理Url的时候,遇到简单字符串会直接使用该字符串作为最终的Url,而当遇到数组的时候会调用Controller的CreateUrl来生成Url.
说到简单字符串,这两个链接中其实有一个非常本质的区别。虽然同样都是字符串'user/register',但是在第一个字符串中就代表一个13个字符的相对路径,而第二个链接中则代表UserController的registerAction,是有着特俗意义的。
附上Yii处理Url的方法NormalizeUrl的源代码:
复制代码 代码如下:
/**
* 将输入参数标准化为有效的 URL。
*
* 如果输入参数为空字符串,则返回当前请求的URL。
*
* 如果输入参数是非空字符串,则被视为有效 URL,并且将
* 不做任何更改地返回。
*
* 如果输入参数是一个数组,则将其视为控制器路由和
* GET 参数列表,并且将调用 {@link CController::createUrl} 方法来
* 创建一个 URL。在本例中,第一个数组元素指的是控制器路由
*,其余键值对指的是 URL 的附加 GET 参数。
* 例如,array('post/list', 'page'=>3) 可用于生成 URL
* /index.php?r=post/list&page=3
*
* @param mix $url 用于生成有效 URL 的参数
* @return string 规范化 URL
*/
public static function normalizeUrl($url)
{
if(is_array($url))
{
if(isset($url[0]))
{
if(($c=Yii::app()->getController())!==null)
$url=$c->createUrl($url[0],array_splice($url,1));
else
$url=Yii::app()->createUrl($url[0],array_splice($url,1));
}
else
$url='';
}
return $url==='' ? Yii::app()->getRequest()->getUrl() : $url;
}
声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn