如何在 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 路由中使用锚点?的主要内容,如果未能解决你的问题,请参考以下文章