8

How can I get User data in theKnpMenuBundle's Builder?

I know I can get the user data via this line in Controller:

$user = $this->get('security.context')->getToken()->getUser();

but I want it to get in my menu builder aswell, so I can put the username in the menu.

Peon
  • 7,902
  • 7
  • 59
  • 100
NaGeL182
  • 894
  • 1
  • 13
  • 35

2 Answers2

10

Your MenuBuilder is defined as a service in Symfony2, as you can see in https://github.com/KnpLabs/KnpMenuBundle/blob/master/Resources/doc/menu_service.rst

Basically, all you need to do is configure your MenuBuilder service definition to inject the security context. (http://symfony.com/doc/current/book/service_container.html#referencing-injecting-services)

NuLo
  • 1,298
  • 1
  • 11
  • 16
simshaun
  • 21,263
  • 1
  • 57
  • 73
9

Simshaun is totaly right. After some research i manage to do it like this :

  1. Add the injection on services.yml :

    administration_main.menu.main:
      class: Knp\Menu\MenuItem
      factory_service: administration_main.menu_builder
      factory_method: createAdministrationMainMenu
      arguments: ["@request","@security.context"]
      scope: request
      tags:
          - { name: knp_menu.menu, alias: administrationMain }
    
  2. Use it on the menu builder

    use Symfony\Component\Security\Core\SecurityContext;
    
    public function createAdministrationMainMenu(Request $request, SecurityContext $securityContext){
    
      $securityContext->getToken()->getUser();
    
    }
    
Rob
  • 4,927
  • 4
  • 26
  • 41
emottet
  • 457
  • 6
  • 18