Symfony 5.0 和 KnpMenuBundle - 如何配置

Symfony 5.0 and KnpMenuBundle - how to configure

在 Symfony 5.0 应用程序中,我想使用 KnpMenuBundle。 我通过 运行

安装了它
composer require knplabs/knp-menu-bundle "^3.0"

这会自动在 [ProjectRoot]/config/bundles 中创建一个条目。php":

Knp\Bundle\MenuBundle\KnpMenuBundle::class => ['all' => true]

当然它也下载了包。

文档(位于:https://symfony.com/doc/master/bundles/KnpMenuBundle/index.html)指出配置包应该编辑文件 "app/config/config.yml"。 Symfony 5 不再有这个文件——但是“[ProjectRoot]/config/packages”中的每个 "package" 都有单独的配置文件。 但是,没有为 KnpMenuBundle 创建配置文件。我自己怎么能做到这一点 - 意思是:命名约定是什么以及我如何告诉捆绑包实际使用配置文件?

还有一个问题。 在文档中它说在树枝模板中呈现菜单的工作方式如下:

{{ knp_menu_render('AppBundle:Builder:mainMenu') }}

对于 Symfony 5 - 正确的语法/路径是什么?

KnpMenuBundle 的配置是可选的。这就是没有创建配置文件的原因。 在 Symfony 4 和 5 中,您可以在 config/packages 目录中手动添加一个 yaml 配置文件。它将被自动读取。这个文件的好名字可以是 knp_menu.yaml。在配置文件中,您使用与文档中相同的内容。例如

knp_menu:
    twig:
        template: KnpMenuBundle::menu.html.twig

要呈现菜单,您可以使用

{{ knp_menu_render('App:Builder:mainMenu') }}

其中 Builder 是 src/Menu 目录中 class 的名称,mainMenu 是从 class (See the docs) 调用的方法。

更新

如果我没记错的话,你必须定义 Symfony 4 中的 Builder class as a service,它略有不同。正如您可以从文档中阅读的那样,您现在将呈现您的菜单,提供服务的别名,例如

{{ knp_menu_render('main') }}

(将所有 AppBundle 实例更改为 App)。