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


Posted in PHP onJanuary 16, 2012
<?php echo CHtml::link('错误链接','user/register')?> 
<?php echo CHtml::link('正确链接',array('user/register'))?>

假定设定了UrlManager的配置为Path模式,用yii默认的配置:
'urlManager'=>array( 
'urlFormat'=>'path', 
'rules'=>array( 
'<controller:\w+>/<id:\d+>'=>'<controller>/view', 
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', 
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>', 
), 
),

上面两行代码会生产什么样的链接地址?
http://<site-addr>/user/register //错误链接
http://<site-addr>/index.php/user/register //正确链接
第一个链接是错误的,浏览器会返回404错误。第二个链接会访问UserController的Register方法。区别就在于第二个链接在生成的时候我们传入的参数是一个array数组,而第一个方法是一个简单字符串。Yii在处理Url的时候,遇到简单字符串会直接使用该字符串作为最终的Url,而当遇到数组的时候会调用Controller的CreateUrl来生成Url.
说到简单字符串,这两个链接中其实有一个非常本质的区别。虽然同样都是字符串'user/register',但是在第一个字符串中就代表一个13个字符的相对路径,而第二个链接中则代表UserController的registerAction,是有着特俗意义的。
附上Yii处理Url的方法NormalizeUrl的源代码:
/** 
* Normalizes the input parameter to be a valid URL. 
* 
* If the input parameter is an empty string, the currently requested URL will be returned. 
* 
* If the input parameter is a non-empty string, it is treated as a valid URL and will 
* be returned without any change. 
* 
* If the input parameter is an array, it is treated as a controller route and a list of 
* GET parameters, and the {@link CController::createUrl} method will be invoked to 
* create a URL. In this case, the first array element refers to the controller route, 
* and the rest key-value pairs refer to the additional GET parameters for the URL. 
* For example, <code>array('post/list', 'page'=>3)</code> may be used to generate the URL 
* <code>/index.php?r=post/list&page=3</code>. 
* 
* @param mixed $url the parameter to be used to generate a valid URL 
* @return string the normalized 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; 
}
PHP 相关文章推荐
php下的权限算法的实现
Apr 28 PHP
实用函数8
Nov 08 PHP
PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
Nov 02 PHP
php pki加密技术(openssl)详解
Jul 01 PHP
纯PHP生成的一个树叶图片画图例子
Apr 16 PHP
php实现在服务器端调整图片大小的方法
Jun 16 PHP
php实现xml转换数组的方法示例
Feb 03 PHP
浅谈PHP面向对象之访问者模式+组合模式
May 22 PHP
PHP命令空间namespace及use的用法小结
Nov 27 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
解决在Laravel 中处理OPTIONS请求的问题
Oct 11 PHP
浅谈Laravel中的三种中间件的作用
Oct 13 PHP
fgetcvs在linux的问题
Jan 15 #PHP
PHP异步调用socket实现代码
Jan 12 #PHP
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
Jan 12 #PHP
PHP警告Cannot use a scalar value as an array的解决方法
Jan 11 #PHP
Trying to clone an uncloneable object of class Imagic的解决方法
Jan 11 #PHP
win2003服务器使用WPS的COM组件的一些问题解决方法
Jan 11 #PHP
php通过COM类调用组件的实现代码
Jan 11 #PHP
You might like
生成静态页面的php函数,php爱好者站推荐
2007/03/19 PHP
php获取数组长度的方法(有实例)
2013/10/27 PHP
Laravel 5框架学习之环境与配置
2015/04/08 PHP
PHP实现批量删除(封装)
2017/04/28 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
PHP+Apache实现二级域名之间共享cookie的方法
2019/07/24 PHP
JavaScript 对象链式操作测试代码
2010/04/25 Javascript
JS 实现导航栏悬停效果(续2)
2013/09/24 Javascript
JS操作CSS随机改变网页背景实现思路
2014/03/10 Javascript
在JS数组特定索引处指定位置插入元素
2014/07/27 Javascript
js跨域问题浅析及解决方法优缺点对比
2014/11/08 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
JavaScript cookie详解及简单实例应用
2016/12/31 Javascript
用JavaScript和jQuery实现瀑布流
2017/03/19 Javascript
微信小程序中实现手指缩放图片的示例代码
2018/03/13 Javascript
JavaScript new对象的四个过程实例浅析
2018/07/31 Javascript
go和python调用其它程序并得到程序输出
2014/02/10 Python
20招让你的Python飞起来!
2016/09/27 Python
pycharm+django创建一个搜索网页实例代码
2018/01/24 Python
Python小工具之消耗系统指定大小内存的方法
2018/12/03 Python
python hbase读取数据发送kafka的方法
2018/12/27 Python
Python中正则表达式的用法总结
2019/02/22 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
2020/06/04 Python
pandas分批读取大数据集教程
2020/06/06 Python
django和flask哪个值得研究学习
2020/07/31 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
2021/02/22 Python
详解html5 canvas常用api总结(二)--绘图API
2016/12/14 HTML / CSS
文秘专业应届生求职信范文
2013/11/14 职场文书
旅行社各个岗位职责
2014/03/15 职场文书
合作投资意向书
2014/04/01 职场文书
小学生学雷锋演讲稿
2014/04/25 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/10/28 职场文书
骨干教师申报材料
2014/12/17 职场文书
幼儿园奖惩制度范本
2015/08/05 职场文书
公文写作:工伤事故分析报告怎么写?
2019/11/05 职场文书
一行代码python实现文件共享服务器
2021/04/22 Python