Я использую KnpMenuBundle в своем приложении, и я следовал их инструкциям, чтобы настроить свое меню как службу.
Всякий раз, когда я пытаюсь отобразить меню, используя вспомогательную функцию ветки
{{ knp_menu_render('VhotoHelperBundle:MenuBuilder:mainMenu') }}
Это дает мне следующую ошибку ...
Исключение было сгенерировано во время рендеринга шаблона ("Catchable Fatal Error: Аргумент 1, передаваемый в Vhoto \ HelperBundle \ Menu \ MenuBuilder :: __ construct (), должен реализовывать интерфейс 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"]
не вступает в силу, я что-то упускаю в классе расширений? Я прочитал главу о Предоставление семантической конфигурации для связок , но она не пролила свет.
РЕДАКТИРОВАТЬ: Хорошо, только что понял, что мне не нужно вручную регистрировать мое расширение в моем классе пакета. Теперь удалил этот код из моего приложения, но все равно получаю то же исключение.