繁体   English   中英

Symfony 4-KNP菜单-不调用MenuBuilder

[英]Symfony 4 - KNP Menu - MenuBuilder not being called

我正在从Symfony 3.3升级到Symfony 4。

KNPMenu在Symfony 3.3下运行良好,但是现在我看到了此异常:

在呈现模板的过程中引发了异常(“未定义菜单“ main”。“)。

services.yaml

App\Menu\MenuBuilder:
    public: true
    tags:
        - { name: app.menu_builder.admin, method: createAdminMenu, alias: admin }
        - { name: app.menu_builder.calendar, method: createCalendarMenu, alias: calendar }
        - { name: app.menu_builder.main, method: createMainMenu, alias: main }
        - { name: app.menu_builder.trailer, method: createTrailerMenu, alias: trailer }
        - { name: app.menu_builder.user, method: createUserMenu, alias: user }

使用MenuBuilder

Namespace App\Menu;

use Knp\Menu\FactoryInterface;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerAwareTrait;
use Symfony\Component\Security\Core\Security;

class MenuBuilder implements ContainerAwareInterface
{

    use ContainerAwareTrait;

    private $factory;

    /**
     * @param FactoryInterface $factory
     */
    public function __construct( FactoryInterface $factory )
    {
        $this->factory = $factory;
    }

die('here'); __construct中 ,它永远不会执行。

使用php bin /控制台debug:container菜单会产生:

Information for Service "App\Menu\MenuBuilder"
==============================================

 ---------------- ------------------------------------------------------------------------- 
  Option           Value                                                                    
 ---------------- ------------------------------------------------------------------------- 
  Service ID       App\Menu\MenuBuilder                                                     
  Class            App\Menu\MenuBuilder                                                     
  Tags             app.menu_builder.admin (method: createAdminMenu, alias: admin)           
                   app.menu_builder.calendar (method: createCalendarMenu, alias: calendar)  
                   app.menu_builder.main (method: createMainMenu, alias: main)              
                   app.menu_builder.trailer (method: createTrailerMenu, alias: trailer)     
                   app.menu_builder.user (method: createUserMenu, alias: user)              
  Public           yes                                                                      
  Synthetic        no                                                                       
  Lazy             no                                                                       
  Shared           yes                                                                      
  Abstract         no                                                                       
  Autowired        yes                                                                      
  Autoconfigured   yes                                                                      
 ---------------- ------------------------------------------------------------------------- 

如何获得MenuBuilder __construct执行?

谢谢大家的时间。

该要点很有帮助: https : //gist.github.com/lsv/4d8044d21819f28f0dde52a3fb8211a0

该答案很有帮助: 如何避免弃用“ knp_menu.factory”?

services.yaml

app.menu_builder:
    class: App\Menu\MenuBuilder

app.menu.main:
    class: Knp\Menu\MenuItem
    factory: ['@app.menu_builder', 'createMainMenu']
    arguments: { $options: [] }
    tags:
    - { name: knp_menu.menu, alias: main }

我使用php bin/console debug:autowiring security来获取安全授权检查器

然后我像这样更新了MenuBuilder.php

Namespace App\Menu;

use Knp\Menu\FactoryInterface;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;

class MenuBuilder
{

    private $factory;
    private $security;

    /**
     * @param FactoryInterface $factory
     */
    public function __construct( FactoryInterface $factory, AuthorizationCheckerInterface $security )
    {
        $this->factory = $factory;
        $this->security = $security;
    }

添加SecurityAuthorizationChecker允许我控制此语句提供的菜单项:

if( $this->security->isGranted( 'IS_AUTHENTICATED_FULLY' ) )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM