knpmenubundle: Как получить пользовательские данные в конструкторе?

Как я могу получить данные пользователя в theKnpMenuBundle's Builder?

Я знаю, что могу получить пользовательские данные через эту строку в контроллере:

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

но я хочу, чтобы он также попал в мой конструктор меню, чтобы я мог поместить имя пользователя в меню.


person NaGeL182    schedule 07.02.2013    source источник


Ответы (2)


Ваш MenuBuilder определен как служба в Symfony2, как вы можете видеть в https://github.com/KnpLabs/KnpMenuBundle/blob/master/Resources/doc/menu_service.rst

По сути, все, что вам нужно сделать, это настроить определение службы MenuBuilder для внедрения контекста безопасности. (http://symfony.com/doc/current/book/service_container.html#referencing-injecting-services)

person simshaun    schedule 07.02.2013

Симшан совершенно прав. После некоторых исследований мне удалось сделать это так:

  1. Добавьте инъекцию на 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 Symfony\Component\Security\Core\SecurityContext;
    
    public function createAdministrationMainMenu(Request $request, SecurityContext $securityContext){
    
      $securityContext->getToken()->getUser();
    
    }
    
person emottet    schedule 01.10.2013