现在说下问题,请看下面的这段代码:
$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 $route参数是字符串,不是数组,所以不能写成数组 应该为:Yii::app()=>createUrl('/cart/index',array('id'=>1));
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.