我在我的應用程序中使用了KnpMenuBundle,我按照他們的說明將我的菜單設置爲服務。Symfony2 - KnpMenuBundle:服務容器中的致命異常
每當我試着用樹枝輔助函數
{{ knp_menu_render('VhotoHelperBundle:MenuBuilder:mainMenu') }}
它給了我下面的錯誤渲染菜單...
An exception has been thrown during the rendering of a template ("Catchable Fatal Error: Argument 1 passed to Vhoto\HelperBundle\Menu\MenuBuilder::__construct() must implement interface Knp\Menu\FactoryInterface, none given
我services.yml
文件存在於我的包的Resources/config
並具有以下內容:
services:
vhoto.menu_builder:
class: Vhoto\HelperBundle\Menu\MenuBuilder
arguments: ["@knp_menu.factory"]
vhoto.menu.main:
class: Knp\Menu\MenuItem
factory_service: vhoto.menu_builder
factory_method: createMainMenu
arguments: ["@request"]
scope: request
tags:
- { name: knp_menu.menu, alias: main }
我在包的DependencyInjection
目錄中創建一個擴展類:
class VhotoHelperExtension extends Extension
{
public function load(array $config, ContainerBuilder $container)
{
$loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');
}
}
而且已經更新了我的包的構建方法來註冊擴展:
public function build(ContainerBuilder $container)
{
parent::build($container);
$container->registerExtension(new VhotoHelperExtension());
}
我無法弄清楚究竟是爲什麼我的arguments: ["@knp_menu.factory"]
配置沒有生效,我在擴展類中丟失了什麼?我閱讀了關於Exposing Semantic Configuration for bundles的章節,但沒有說清楚。
編輯:好的,只是意識到我不需要在我的包類中手動註冊我的擴展。現在從我的應用程序中刪除了該代碼,但仍然得到相同的異常。