现在说下问题,请看下面的这段代码:
$words = array(); foreach ($items as $item) { $tmp['link'] = CHtml::link($item['searchword'], CHtml::normalizeUrl(array('list/search', 'name' => urlencode($item['searchword'])))); $words[] = $tmp; unset($tmp); }
这是我又在查找项目哪有问题时,发现的一个问题,就是一个热门搜索,会列出来5个经常被搜索的问题当然,这个功能是放在头部的,页面都有加载这个头文件,
当我在首页点击这些被热门搜索的商品时,是可以正常跳转到相应的页面的,但是如果我点击一个商品,如:苹果,那我们就跳转到了苹果这个商品的详细商品了,
苹果商品的URL:http://clzv2.lygclz.com/index.php/product/default/view/pid/1
这时,我们在点击被热门搜索的商品时,就会出错.URL不存在,
某热门商品的URL地址:http://www.clz.com/index.php/product/list/search/name/%25E5%25BC%2580%25E5%25BF%2583%25E6%259E%259C
出错的原因是在/product/list多出一个product路径.去掉就正常了,问题就出在上面的那段代码 array(‘list/search‘),应该为array(‘/list/search‘).
如果list前没有加 / ,Yii会以为是指的在product模块下的list,所以大家要注意细节.
Yii::app()->createUrl
public function createUrl($route,$params=array(),$ampersand='&') { return $this->getUrlManager()->createUrl($route,$params,$ampersand); }
CHtml::normalizeUrl
normalizeUrl() 方法 public static string normalizeUrl(mixed $url) $url mixed 生成一个有效的URL的参数 {return} string 有效的URL 源码: framework/web/helpers/CHtml.php#1088 (显示) 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; } 通过标准的输入来生成一个有效的URL。 如果输入参数是一个空字符串,将返回当前请求的URL。 如果输入参数不是一个空字符串,它被当作一个有效的URL,不作任何改变被返回。 如果输入参数是一个数组,它被视为一个控制器路由和一个GET参数列表,将会调用CController::createUrl方法来创建一个URL。既然这样,数组的第一个元素是指控制器的路由,其它的键名-键值对指额外的URL参数。例如,array('post/list', 'page'=>3) 可以生成一个URL /index.php?r=post/list&page=3.
说点关于Yii的 Yii::app()->createUrl 与 CHtml::normalizeUrl 使用的问题,布布扣,bubuko.com