2016-04-28 44 views
2

我已经定义的路线为遵循我的routing.yml文件:如何在Symfony路由中使用锚点?

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

但是当我问的Symfony生成的路线,我得到:

/dashboard%23messages/12345 

我怎么能跳过编码部分路线生成?或者我怎么能在路径定义中跳出# char? PS:使用(大)遗留系统,我不能更改的网址。

回答

3

可从Symfony 3.2获得。锚杆

支持已经公布了使用fragment可变路由组件:

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

将产生一个网址:/user/settings#password

欲了解更多信息view the announcement

+0

与[KnpMenuBundle](https://github.com/KnpLabs/KnpMenuBundle):'$ node-> addChild('settings',['route'=>'user_settings','routeParameters'=> ['_ fragment'= >'密码']])' –

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 - >#

+0

我唯一关心的是网址的生成。不是URL处理。 –