Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use anchors in Symfony routing?

I have defined a route as followed in my routing.yml file :

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

However when I ask Symfony to generate that route, I get :

/dashboard%23messages/12345

How can I skip the encoding part of the route generation? Or how can I escape the # char in the path definition?

PS : Working with a (big) legacy system, I cannot change the urls.

like image 877
i.am.michiel Avatar asked Apr 28 '16 09:04

i.am.michiel


3 Answers

Available from Symfony 3.2.

Support for anchors has been announced for the routing component using the fragment variable :

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

Will generate an url : /user/settings#password

For more information view the announcement.

like image 162
i.am.michiel Avatar answered Oct 10 '22 05:10

i.am.michiel


You cannot easily - route parts are encoded unconditionally:

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

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

Technically you might have extended the class UrlGenerator class and swap them using router.options.generator_class parameter. Then you could override the doGenerate method and replace %23 -> #.

like image 24
zerkms Avatar answered Oct 10 '22 06:10

zerkms


In twig

<a href="{{ path('user_settings', { '_fragment': 'password' }) }}">
like image 2
Kaizoku Gambare Avatar answered Oct 10 '22 06:10

Kaizoku Gambare