如何使用CakePHP 3构建具有多个查询(?)参数的Url

时间:2015-07-07 12:52:57

标签: cakephp url-routing cakephp-3.0

我正在进行重定向以自动完成某些字段,而我正在使用简单的javascript进行此操作。

我想打印一个没有A标签的网址,然后我使用了Url builder。我在Router类中看过文档并查看了此方法的源代码,但我看到了一些我无法理解的内容。

当我将Url builder与此代码一起使用时,一切正常:

<?= $this->Url->build(['controller' => 'places', 'action' => 'add', '?' => ['event_id' => $event->id]]) ?>

Url genetared是:

/places/add?event_id=1

但是,当我添加更多参数时?查询,我得到一个&amp;在网址中,但我没有在文档中找到一些特殊字符过滤器。

<?= $this->Url->build(['controller' => 'places', 'action' => 'add', '?' => ['from' => 'events','id' => $event->id]])
// Generates:    /places/add?from=events&amp;id=1
// I want:       /places/add?from=events&id=1
 ?>

是否可以选择获得&amp;没有&amp;?如果我将所有内容放在一个字符串中,我会得到UTF代码%5D和那些。我在javascript window.open中使用url,然后我不在html体内打印。

我在http://api.cakephp.org/3.0/source-class-Cake.Routing.Router.html#509-646中看到第597行,但我不明白$ url = static :: _ applyUrlFilters($ url);代码正在改变一些东西。

谢谢!

1 个答案:

答案 0 :(得分:3)

URL帮助程序用于生成在标记上下文中使用的URL,因此它们是使用h()函数进行实体编码。

如果您需要普通网址,请不要使用网址助手,而应使用Router::url()方法。

use Cake\Routing\Router;

Router::url([
    'controller' => 'places',
    'action' => 'add',
    '?' => [
        'from' => 'events',
        'id' => $event->id
    ]
]);