说点关于Yii的 Yii::app()->createUrl 与 CHtml::normalizeUrl 使用的问题

现在说下问题,请看下面的这段代码:

$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

时间: 2024-10-24 18:57:23

说点关于Yii的 Yii::app()->createUrl 与 CHtml::normalizeUrl 使用的问题的相关文章

Yii url createUrl redirect相关

一篇文章: 在yii中明明白白生成网址: 在Yii中经常要生成URL,不管是为了自动跳转还是仅仅是一个链接.下面对Yii中的URL生成做了一个总结.提示:以下controllerX代表控制器X,actionX代表方法X.在Controller::action中,我们要输出一个链接,可以这样做:$this->createUrl(‘actionName’, array(‘params01′=>’value01′, ‘params02′=>’value02′) );//Controller::

Yii使用公共函数

在网站项目中,没必要把公用的函数写成一个工具类,有时候面向过程其实更方便. 在入口文件index.php里添加 require_once('protected/function.php'); 即可对其引用,成为公用的函数集合. function.php如下: <?php /** * This is the shortcut to DIRECTORY_SEPARATOR */ defined('DS') or define('DS',DIRECTORY_SEPARATOR); defined('T

PHP 的YII框架中CActiveForm dropDownList联动效果

在view端:  <?php echo $form->labelEx($model, 'test'); ?>         <?php  echo CHtml::dropDownList('province','',array('province', 1=>'广东', 2=>'广西'),      array(         'ajax'=>array(             'type'=>'POST',             'url'=>

yii create url (一)

1.$this->redirect这里的$this是当前的controller.可能是应用程序的也 可能是模块下的 这里仅将解一下第一个参能是url,当url是一个字符串时,它会自己动跳转 如$this->redirect('/'); 会跳转到站点根,如果你的当前主机为localhost, 那么他就会跳到http://localhost/ 再者$this->redirect('/books');,则会跳到http://localhost/books 在应用程序的controller中,也

YII使用技巧收集

db组件 'schemaCachingDuration'=>3600, 为什么不起做用?需要开缓存 如何在页面下边显示sql的查询时间在log组件的routes中加入array('class'=>'CProfileLogRoute','levels'=>'error, warning',)同时在db组件中加入'enableProfiling'=>true,同时在这种情况下,可以用CDbConnection::getStats() 查看执行了多少个语句,用了多少时间 如何知道某一个程

yii create url (二)

在Yii中经常要生成URL,不管是为了自动跳转还是仅仅是一个链接.下面对Yii中的URL生成做了一个总结.提示:以下controllerX代表控制器X,actionX代表方法X.在Controller::action中,我们要输出一个链接,可以这样做:$this->createUrl(‘actionName’, array(‘params01′=>’value01′, ‘params02′=>’value02′) );//Controller::createUrl($route,$par

yii模板中常用变量总结

yii模板中常用的一些变量总结. 现有这样一个url:http://www.phpernote.com/demos/helloworld/index.php/xxx/xxx 则通过如下方式获取的值对应分别为: 除域名外的首页地址 echo Yii::app()->user->returnUrl;  //  '/demos/helloworld/index.php' 当前页面url echo Yii::app()->request->url;  //  '/demos/hellowo

yii 验证码那点事儿

今天要使用yii验证码, 不过, 这个验证码是整站通用的, 也就是说, 有个表单的提交是使用ajax方式来提交, 整站, 不管在哪个地方, 都能点出来此窗口, 来提交信息 关于yii验证码, framework/web/widgets/captcha/CCaptcha.php里, 它源码里有这么一部分 >---protected function renderImage() >---{ >--->---if(!isset($this->imageOptions['id']))

YII 常用路径总结

Yii framework已经定义的命名空间常量 system: 指向Yii框架目录; YII\framework zii: 指向zii library 目录; YII\framework\zii application : 指向应用程序基本目录;  protected\ webroot: 指向包含里入口脚本 文件的目录. 此别名自 1.0.3 版起生效. \ ext : 指向包含所有第三方扩展的目录, 从版本 1.0.8 可用;  \protected\extensions Yii::getP