Search code examples
phpsymfonytwigknpmenubundle

Passing Parameters to KnpMenuBundle-MenuBuilder (registered as service)


I want to pass an additional parameter {'id': '555'} from a twig-template to the $options-parameter in the MenuBuilder.php. The twig looks like:

...
{{ knp_menu_render('createSwitchButton', {'id': '555'} )  }}
...

The service.yml looks like:

 RochPartyplaner.menu_builder:
    class: RochPartyplaner\PartyBundle\Menu\MenuBuilder
    arguments: ["@knp_menu.factory"]

 RochPartyplaner.menu.createSwitchButton:
    class: Knp\Menu\MenuItem 
    factory_service: RochPartyplaner.menu_builder
    factory_method: createSwitchButton
    arguments: ["@request", []]
    scope: request 
    tags:
        - { name: knp_menu.menu, alias: createSwitchButton }

And the MenuBuilder.php looks like:

...    
public function createSwitchButton(Request $request,array $options)
{
    $menu = $this->factory->createItem('root');

    $menu->addChild($options['id'], array('route' => 'login'));
    ...

    return $menu;
}

But: in the Builder, $options['id'] is unknown. I think the arguments-statement in the service.yml is wrong.

Would somebody help me?


Solution

  • You didn't mention a version of KnpBundle. In v2.* version according to documentation you can do like this

    {% set menuItem = knp_menu_get('TestProductBundle:Builder:mainMenu', [], {'some_option': 'my_value'}) %}
    
    {{ knp_menu_render(menuItem) }}