我在我的应用程序中使用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的章节,但它没有说清楚。
答案 0 :(得分:1)
好的,重新阅读基本设置后,似乎除了我的twig函数调用之外,一切都是正确的。
{{ knp_menu_render('main') }}