knpmenubundle:如何在构建器中获取用户数据?

NaG*_*182 7 php symfony knpmenubundle

如何在KnpMenuBundleBuilder中获取用户数据?

我知道我可以通过Controller中的这一行获取用户数据:

$user = $this->get('security.context')->getToken()->getUser();
Run Code Online (Sandbox Code Playgroud)

但是我想让它进入我的菜单构建器,所以我可以将用户名放在菜单中.

sim*_*aun 10

您的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)


小智 8

Simshaun完全正确.经过一些研究,我设法做到这样:

  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 }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在菜单构建器上使用它

    use Symfony\Component\Security\Core\SecurityContext;
    
    public function createAdministrationMainMenu(Request $request, SecurityContext $securityContext){
    
      $securityContext->getToken()->getUser();
    
    }
    
    Run Code Online (Sandbox Code Playgroud)