微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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;
}

>覆盖registerCoreComponents,以便您可以拥有第二个网址管理器:

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的优势.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐