如何防止HtmlHelper转义URL部分

时间:2013-02-13 12:02:00

标签: javascript templates cakephp

使用CakePHP 2.2,我想在视图中生成以下链接:

<a href="/teams/edit/${$data.Team.id}">Edit</a>

此标记稍后由Javascript模板引擎选取,因此${$data.Team.id}部分。

这是我明显的第一次尝试:

echo $this->Html->link(
    'Edit',
    array('controller' => 'teams', 'action'=>'edit', '${$data.Team.id}')
);

结果:

<a href="/teams/edit/%24%7B%24data.Team.id%7D">Edit</a>

${}很好地进行了网址编码 - 这是我不想要的。

好的,但有一个'escape' => false选项,The Book说。

echo $this->Html->link(
    'Edit',
    array('controller' => 'teams', 'action'=>'edit', '${$data.Team.id}'),
    array('escape' => false)
);

结果不会改变。显然,'escape' param只会影响URL数组的'?'键中实际查询字符串的处理。

如何使用HtmlHelper获得所需的结果?

2 个答案:

答案 0 :(得分:1)

没有办法实现你想要的。路由器将urlencode所有已命名并传递的参数。您可以使用HtmlHelper::url()生成/teams/edit/部分,然后使用简单的字符串连接。

编辑:您可以使用自定义RouteClass并覆盖执行编码的CakeRoute :: _ writeUrl()方法。在url数组中传递一个特殊的参数,告诉它不编码,并取消设置该参数。

答案 1 :(得分:0)

我最终为此创建了自己的帮助程序而没有使用链接帮助程序。在我的助手中,我使用了url helper来生成基本URL,然后我添加了我想要的参数。