2011-12-03 49 views
0

我在我的應用程序中使用了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的章節,但沒有說清楚。

編輯:好的,只是意識到我不需要在我的包類中手動註冊我的擴展。現在從我的應用程序中刪除了該代碼,但仍然得到相同的異常。

回答

1

好了之後重新讀取基本設置,似乎一切都是正確的除了我的樹枝函數調用。

{{ knp_menu_render('main') }}