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

Posted

技术标签:

【中文标题】如何在 Symfony 路由中使用锚点?【英文标题】:How to use anchors in Symfony routing? 【发布时间】:2016-08-22 23:47:16 【问题描述】:

我在 routing.yml 文件中定义了一个路由:

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

但是,当我要求 Symfony 生成该路由时,我得到:

/dashboard%23messages/12345

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

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

【问题讨论】:

【参考方案1】:

可从 Symfony 3.2 获得。

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

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

会生成一个网址:/user/settings#password

欲了解更多信息view the announcement。

【讨论】:

与KnpMenuBundle: $node->addChild('settings', ['route' => 'user_settings', 'routeParameters' =>['_fragment' => 'password']])【参考方案2】:

你不能轻易地 - 路由部分是无条件编码的:

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

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

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

【讨论】:

我唯一关心的部分是 url 生成。不是 url 处理。【参考方案3】:

在树枝上

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

【讨论】:

以上是关于如何在 Symfony 路由中使用锚点?的主要内容,如果未能解决你的问题,请参考以下文章

在 Symfony2 路由中,如何设置可选的子域

React SPA 应用 hash 路由如何使用锚点

如何在 Symfony2 中获取控制器的所有路由列表?

如何在 symfony 路由中自动化函数名?

Symfony 5:如何从路由规则中获取选项数据

如何避免 Symfony 和 locale 路由的重复内容?