gpt4 book ai didi

php - createAbsoluteUrl 生成类似路径的 URL,如何避免?

转载 作者:可可西里 更新时间:2023-10-31 22:46:15 24 4
gpt4 key购买 nike

我创建了一个这样的 URL:

$app->createAbsoluteUrl('/', array(
'param1' => 'val1',
'param2' => 'var2',
);

生成的 URL 是:

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

但我期望这样的 url:

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 并在其位置使用您自己的派生类,那么您有多种选择,例如:

  1. 在原来的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;
    }
  2. 覆盖 registerCoreComponents这样您就可以拥有第二个网址管理器:

    protected function registerCoreComponents()
    {
    parent::registerCoreComponents();

    $components=array(
    'specialUrlManager'=>array(
    'class'=>'CUrlManager',
    'urlFormat'=>'get',
    ),
    );

    $this->setComponents($components);
    }

    您现在可以随时调用 Yii::app()->specialUrlManager->createUrl(...)

您还可以通过其他方式解决问题:

  1. 扩展 CUrlManager 并公开一个允许您选择要在现场创建的 url 风格的方法。

  2. 如果你只需要在一两个地方“获取”url,你总是可以创建一个新的 CUrlManager 对象,当场配置它,调用 createUrl 然后丢弃它。您还可以将这种丑陋隐藏在免费功能的背后。本质上,这种(诚然不推荐)方法是第一种解决方法的低技术版本,因为它具有不需要扩展 CWebApplication 的优点。

关于php - createAbsoluteUrl 生成类似路径的 URL,如何避免?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10317188/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com