0

对于我的应用程序,我正在创建一个菜单。目标是:

  • 在主要 AppBundle 中有一个主菜单
  • 其他捆绑包应该能够扩展主菜单(添加孩子和兄弟姐妹)

它应该感觉像是基于捆绑包的插件架构。在 IRC 上有人建议使用 KnpMenuBundle,所以我尝试了一下。现在我被卡住了,因为我找不到在其他包中扩展主菜单的方法。

在新包中添加子菜单到主菜单需要什么?

这是我到目前为止创建的菜单和服务:

services:
  app.menu_builder:
    class: AppBundle\Menu\MenuBuilder
    arguments: ["@knp_menu.factory"]

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

菜单生成器:

<?php

namespace AppBundle\Menu;


use Knp\Menu\FactoryInterface;
use Symfony\Component\HttpFoundation\RequestStack;

class MenuBuilder
{
    private $factory;

    public function __construct(FactoryInterface $factory)
    {
        $this->factory = $factory;
    }

    public function createMainMenu(RequestStack $requestStack)
    {
        $menu = $this->factory->createItem('root');
        $menu->setDisplay(false);

        return $menu;
    }
}

一个新的 AcmeBundle 现在应该能够扩展主菜单。就像将孩子添加到“根”中一样。如何做到这一点?

如果您需要更多代码,请告诉我。

4

0 回答 0