【问题标题】:Symfony2: KnpMenuBundle: The menu "main" is not defined exception in rendering templateSymfony2:KnpMenuBundle:菜单“main”未在渲染模板中定义异常
【发布时间】:2011-12-08 14:50:52
【问题描述】:

我正在使用 Symfony2,并将 KnpMenuBundle 作为子模块安装并使用 service 配置方法。

当使用布局中的菜单调用页面时:

{{ knp_menu_render('main') }}

我得到错误:

在渲染模板期间引发了异常(“The CCGlobalBundle::layout.html.twig 中的菜单“main”未定义。”)

我的 services.yml 文件(在 CCGlobalExtension.php 包类的 load() 方法中解析)似乎被称为故意错误,导致进一步的代码错误:

# src/CC/GlobalBundle/Resources/Config/services.yml
services:
cc_global.menu_builder:
    class: CC\GlobalBundle\Menu\MenuBuilder
    arguments: ["@knp_menu.factory"]

cc_global.menu.main:
    class: Knp\Menu\MenuItem # the service definition requires setting the class
    factory_service: cc_global.menu_builder
    factory_method: createMainMenu
    arguments: ["@request"]
    scope: request # needed as we have the request as a dependency here
    tags:
        - { name: knp_menu.menu, alias: main } 

我的主 /app/config/config.yml 文件包含 knp_menu: 指令:

knp_menu:
twig: 
    template: knp_menu.html.twig
templating: false # if true, enables the helper for PHP templates
default_renderer: twig # The renderer to use, list is also available by default    

这里有同样的问题,但没有具体的解决方案:Symfony2 - KnpMenuBundle: Fatal exception in service container

有谁知道这可能是什么问题(也检查了 Git 问题)?

【问题讨论】:

    标签: symfony


    【解决方案1】:

    我遇到了这个问题,但发现抛出了这个异常“菜单'main'未定义因为我没有注册MyCompany/MyBundle的服务 /Resources/config/services.yml 在 app/config/config.yml 中。 固定如下:

    http://symfony.com/doc/current/book/service_container.html

    # app/config/config.yml
    imports:
        - { resource: "@MyCompanyMyBundle/Resources/config/services.yml" }
    

    【讨论】:

    • 如果您按照KNP - "Creating Menus as Services" docs 中的服务安装说明逐字进行操作,您很容易会遇到此错误。感谢您分享您的答案。它帮助我很快地协调了这一点(尽管我真的应该知道我没有将配置从我的包导入到主应用程序 - 忘记的傻事)。
    • 感谢您的评论,我试图将菜单添加为服务,最终不得不在 app/config 中创建一个新的 services.yml,这也难怪,感谢您的评论,因为它是一个新文件,尚未被读取。
    【解决方案2】:

    在 Git 中引入了代码错误。 git 问题在这里:https://github.com/KnpLabs/KnpMenuBundle/issues/89

    其他人看到的变化是 /vendor/bundles/Knp/Bundle/MenuBundle/DependencyInjection/KnpMenuExtension.php 的第 28 行应该是这样的:

    $container->getDefinition(sprintf('knp_menu.menu_provider.%s', $builder))->addTag('knp_menu.provider');
    

    当错误的代码读取时:

    $container->getDefinition(sprintf('knp_menu.menu_provider.%s', $builder))->addTag('knp_menu.menu_provider');
    

    注意 'provider' 与 '*menu_provider*'

    【讨论】:

      猜你喜欢
      • 2019-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      • 2012-12-29
      • 1970-01-01
      相关资源
      最近更新 更多