【发布时间】:2011-12-03 11:05:29
【问题描述】:
我在我的应用程序中使用KnpMenuBundle,并按照他们的说明将我的菜单设置为服务。
每当我尝试使用 twig 辅助函数来呈现菜单时
{{ knp_menu_render('VhotoHelperBundle:MenuBuilder:mainMenu') }}
它给了我以下错误...
在渲染模板期间抛出异常(“可捕获的致命错误:传递给 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');
}
}
并更新了我的包的构建方法来注册扩展:
public function build(ContainerBuilder $container)
{
parent::build($container);
$container->registerExtension(new VhotoHelperExtension());
}
我想不通的是为什么我的arguments: ["@knp_menu.factory"] 配置没有生效,我在扩展类中遗漏了什么吗?我阅读了Exposing Semantic Configuration for bundles 上的章节,但没有任何启示。
编辑:好的,刚刚意识到我不需要在我的包类中手动注册我的扩展。现在从我的应用程序中删除了该代码,但仍然出现相同的异常。
【问题讨论】: