我创建一个这样的URL:
$app->createAbsoluteUrl('/', array(
'param1' => 'val1',
'param2' => 'var2',
);
生成的URL是:
http://mysite.com/param1/var1/param2/var2
但我希望这样的网址:
http://mysite.com/?param1=var1¶m2=var2
在功能manual中它说:
$params array additional GET parameters (name=>value). Both the name and value will be URL-encoded.
但它似乎并没有像那样工作.我如何生成预期的URL?谢谢.
解决方法:
您需要指定urlManager应用程序组件应对其生成的URL使用“get”格式;默认是使用“路径”格式. Yii指南explains如何在您的应用程序配置中执行此操作:
array(
......
'components'=>array(
......
'urlManager'=>array(
'urlFormat'=>'get',
),
),
);
更新:所以你的urlFormat是“路径”,这是设计……替代品呢?
如果您不介意扩展CWebApplication并在其位置使用您自己的派生类,那么您有几个选项,例如:
>根据原始createUrl定义自己的createUrlEx方法.它可能看起来像这样:
public function createUrlEx($format,$route,$params=array(),$ampersand='&')
{
$oldFormat = $this->getUrlManager()->getUrlFormat();
$this->getUrlManager()->setUrlFormat($format);
$url = $this->getUrlManager()->createUrl($route,$params,$ampersand);
$this->getUrlManager()->setUrlFormat($oldFormat);
return $url;
}
protected function registerCoreComponents()
{
parent::registerCoreComponents();
$components=array(
'specialUrlManager'=>array(
'class'=>'CUrlManager',
'urlFormat'=>'get',
),
);
$this->setComponents($components);
}
您现在可以随时调用Yii :: app() – > specialUrlManager-> createUrl(…).
您还可以通过其他方式解决问题:
>扩展CUrlManager并公开一种方法,允许您选择要在现场创建的URL的风格.
>如果您只需要在一个或两个地方“获取”网址,您可以随时创建一个新的CUrlManager对象,在现场配置它,调用createUrl然后丢弃它.你也可以在免费功能背后隐藏这种丑陋.基本上这个(诚然不推荐)方法是第一个解决方法的低技术版本,因为它具有不需要扩展CWebApplication的优势.
标签:php,url,yii
来源: https://codeday.me/bug/20190530/1183528.html