对于我的应用程序,我正在创建一个菜单。目标是:
- 在主要 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 现在应该能够扩展主菜单。就像将孩子添加到“根”中一样。如何做到这一点?
如果您需要更多代码,请告诉我。