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

How to build a Url with multiple query (?) params with CakePHP 3

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

我想打印一个没有 A 标签的 URL,然后我使用了 Url 生成器。我已经在 Router class 中查看了此方法的文档并查看了源代码,但我看到了一些我无法理解的内容。

当我将 Url 构建器与此代码一起使用时一切正常:

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

Url 遗传是:

/places/add?event_id=1

但是,当我在 ?查询,我在 url 中得到一个 &,但我没有在文档中找到用于限制特殊字符过滤器的内容。

<?= $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
 ?>

有没有 & 的选项?如果我把所有的都放在一个字符串中,我会得到 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);代码正在改变一些东西。

谢谢!

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

如果您需要普通的 URLs,请不要使用 URL 帮助程序,而是使用 Router::url() 方法。

use Cake\Routing\Router;

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