代码如下:
?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 html' target='_blank'>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 !
相关推荐:
关于yii分页组件的用法
关于yii使用bootstrap的分页样式
对于Yii2.0表关联查询的分析
以上就是对于yii框架中Url的生产问题的解决的详细内容,PHP教程
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
新闻热点
疑难解答