3
votes

Let's say I have a routing setup like that :

users_list:
    pattern:  /users
    defaults: { _controller: AcmeBundle:User:list }

user_edit:
    pattern:  /user-edit/{id}
    defaults: { _controller: AcmeBundle:User:edit }

I would like to setup a menu like this

  • Home
  • --Users list
  • ----User edition

But I'm not sure how to handle my route 'user_edit' with dynamic params "id". Actually I don't want to display the link (which id ?), but I would like the 'Users list' parent node to be active if I edit an user.

I tried something like this

$userNode = $rootNode->addChild('Users list', array(
    'route' => 'users_list',
));
$userNode->addChild('User edition', array(
    'route' => 'user_edit',
));

Symfony complains about the missing parameter :(

Thanks !

2

2 Answers

4
votes

This setup should work if you want to show the links:

$userNode->addChild('User edition', array(
    'route' => 'user_edit',
    'routeParameters' => array('id' => $someParameter)
));

For setting the parrent node as active you could use a custom renderer, override the menubundle's template or just add active class to the menu item based on this condition:

{% if app.request.attributes.get('_route') == 'user_edit' %}
       {# activate parrent node #}
{% endif %}
4
votes

Found something usefull in my case, you're able to solve this using the request in your menu definition class :

$userNode->addChild('User edition', array(
    'route' => 'user_edit',
    'routeParameters' => array('id' => $this->getRequest()->get('id'))
));