如何在 Symfony 路由中使用锚点?

How to use anchors in Symfony routing?

我在 routing.yml 文件中定义了一条路线:

route_name:
    path: "/dashboard#messages/{id}"

然而,当我要求 Symfony 生成该路由时,我得到:

/dashboard%23messages/12345

如何跳过路由生成的编码部分?或者如何转义路径定义中的 # 字符?

PS : 使用(大)遗留系统,我无法更改 url。

你不能轻易 - 路线部分无条件编码:

$url = strtr(rawurlencode($url), $this->decodedChars);

https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Routing/Generator/UrlGenerator.php#L192

从技术上讲,您可能已经扩展了 class UrlGenerator class 并使用 router.options.generator_class 参数交换它们。然后你可以覆盖 doGenerate 方法并替换 %23 -> #.

可从 Symfony 3.2 获得。

已宣布使用 fragment 变量为路由组件支持锚点:

$this->get('router')->generate('user_settings', ['_fragment' => 'password']);

将生成一个 url : /user/settings#password

更多信息view the announcement

在树枝上

<a href="{{ path('user_settings', { '_fragment': 'password' }) }}">