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

标签 php url yii

我创建了一个这样的 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/

相关文章:

php - 使用 php 如何记住文本字段并使用 cookie 在下次访问该网站时显示它?

php - 不使用 setter 和 getter 真的错了吗?

javascript - 转义 ' 和 & 以及 url 中的类似字符

url - 如何使用 GWT 检查给定的图像 URL 是否存在?

php - Yii select2具体数据

html - 如何在 ClinkPaget yii 中的 <a></a> 之间添加标签 <span>

javascript - Laravel 5.4 验证后重定向到模态

php - 将数据从 ajax 传递到 laravel 5.1 Controller 以保存到 mysql?

regex - URL 可以包含分号并且仍然有效吗?

php - Yii 框架 : Display associated table entry through foreign key and search against it