Symfony2 - KnpMenuBundle:服务容器中的致命异常

时间:2011-12-03 11:05:30

标签: php symfony

我在我的应用程序中使用KnpMenuBundle,我已按照他们的说明将我的菜单设置为服务。

每当我尝试使用twig helper函数渲染菜单时

{{ knp_menu_render('VhotoHelperBundle:MenuBuilder:mainMenu') }}

它给了我以下错误......

  

在渲染模板期间抛出异常(“Catchable Fatal Error:传递给Vhoto \ HelperBundle \ Menu \ MenuBuilder :: __ construct()的参数1必须实现接口Knp \ Menu \ FactoryInterface,没有给出

我的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');
    }
}

并更新了我的bundle的构建方法以注册扩展名:

public function build(ContainerBuilder $container)
{
    parent::build($container);
    $container->registerExtension(new VhotoHelperExtension());
}

我无法弄清楚为什么我的arguments: ["@knp_menu.factory"]配置没有生效,我是否遗漏了扩展类中的内容?我阅读了关于Exposing Semantic Configuration for bundles的章节,但它没有说清楚。

编辑:好的,我意识到我不需要在我的bundle类中手动注册我的扩展。现在从我的应用程序中删除了该代码,但仍然得到相同的异常。

1 个答案:

答案 0 :(得分:1)

好的,重新阅读基本设置后,似乎除了我的twig函数调用之外,一切都是正确的。

{{ knp_menu_render('main') }}