1

在 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”中每个“包”的单个配置文件。但是没有为 KnpMenuBundle 创建配置文件。我自己怎么能做到这一点 - 意思是:命名约定是什么以及如何告诉捆绑包实际使用配置文件?

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

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

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

4

1 回答 1

2

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 目录中类的名称,而 mainMenu 是从类中调用的方法(请参阅文档)。

更新

如果我没记错的话,你必须将Builder 类定义为Symfony 4 的服务,这略有不同。正如您从文档中看到的那样,您现在将呈现您的菜单并给出服务的别名,例如

{{ knp_menu_render('main') }}

(将所有 AppBundle 事件更改为App)。

于 2020-01-14T17:22:57.280 回答