php生成本地连接地址,php – createAbsoluteUrl生成一个类似路径的URL,如何避免它?...

我创建一个这样的URL:

$app->createAbsoluteUrl('/', array(

'param1' => 'val1',

'param2' => 'var2',

);

生成的URL是:

http://mysite.com/param1/var1/param2/var2

但我希望这样的网址:

http://mysite.com/?param1=var1&param2=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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值