首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >显示错误的Symfony KnpMenuBundle [MenuBuilder作为服务]

显示错误的Symfony KnpMenuBundle [MenuBuilder作为服务]
EN

Stack Overflow用户
提问于 2017-10-11 05:12:27
回答 1查看 551关注 0票数 0

我使用sumfony 3.3.10,我安装了一个新的symfony项目,并使用以下命令添加了knpMenuBundle,

代码语言:javascript
复制
composer require knplabs/knp-menu-bundle "^2.0"

现在,我完全按照这里提到的那样跟踪了一切,service.html

并在default/index.html.twig文件中添加了这一行{{ knp_menu_render('main') }}

现在,当我执行这个项目时,它会显示出这个错误,

代码语言:javascript
复制
[InvalidArgumentException]


Menu builder services must be public but "app.menu_builder" is a private service.

config.yml

代码语言:javascript
复制
knp_menu:
        # use "twig: false" to disable the Twig extension and the TwigRenderer
        twig:
            template: KnpMenuBundle::menu.html.twig
        #  if true, enables the helper   for PHP templates
        templating: false
        # the renderer to use, list is also available by default
        default_renderer: twig

MenuBuilder.php

代码语言:javascript
复制
    <?php
namespace AppBundle\Menu;

use Knp\Menu\FactoryInterface;

    class MenuBuilder
{
    private $factory;

    /**
     * @param FactoryInterface $factory
     *
     * Add any other dependency you need
     */
    public function __construct(FactoryInterface $factory)
    {
        $this->factory = $factory;
    }

    public function createMainMenu(array $options)
     {
        $menu = $this->factory->createItem('root');

        $menu->addChild('Home', array('route' => 'homepage'));
        // ... add more children

        return $menu;
     }
 }

services.yml

代码语言:javascript
复制
app.menu_builder:
            class: AppBundle\Menu\MenuBuilder
            arguments: ["@knp_menu.factory"]
            tags:
                - { name: knp_menu.menu_builder, method: createMainMenu, alias: main } # The alias is what is used to retrieve the menu

我该怎么解决这个问题。任何帮助都是非常感谢的。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-11 05:56:02

我将public: true添加到services.php中的app.menu_builder服务中,

代码语言:javascript
复制
app.menu_builder:
        class: AppBundle\Menu\MenuBuilder
        public: true
        arguments: ["@knp_menu.factory"]
        tags:
            - { name: knp_menu.menu_builder, method: createMainMenu, alias: main } # The alias is what is used to retrieve the menu

现在一切都很好。

参考:private.html#marking-services-as-public-private

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46680296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档