Symfony 2.1+在路由中编码hash / pound“#”

时间:2013-09-04 12:43:57

标签: symfony twig

我正在从Symfony 2.0升级到2.3。我们有定义哈希的路由,因为我们有一个单页应用程序。

通过注释配置的路线:

/**
 * @Route("/app#orders/{id}", name="app_order")
 */

我们使用Twig生成电子邮件并在Twig模板中使用这些路由:

<a href="{{ url('app_order', { 'id': '123' }) }}">View order</a>

升级之前,这很好用。升级后,#被编码为%23,但斜线保持不变。这当然会在电子邮件中生成无效的URL。

为什么只有哈希编码而不是斜杠?应该是全有或全无。除了进行字符串替换之外,我还有哪些选项?

我已经尝试过的事情没有帮助:

  • 将autoescape设置为false {% autoescape false %}
  • 使用原始{{ url(...)|raw }}
  • 结合使用raw和autoescape = false

1 个答案:

答案 0 :(得分:4)

如果您查看UrlGenerator代码,可以看到,rawurlencode后代码未被解码。 在提交6039569中添加了主题标签的转义。

作为一种解决方法,您可以扩展UrlGenerator类并使用包含的主题标签替换$decodedChars数组。然后告诉Symfony使用你的生成器类:

parameters:
    router.options.generator_base_class: Acme\MyBundle\Routing\HashtagDecodedUrlGenerator