Symfony2 - KnpMenuBundle: фатальное исключение в служебном контейнере - PullRequest
0 голосов
/ 03 декабря 2011

Я использую 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"] не вступает в силу, я что-то упускаю в классе расширений? Я прочитал главу о Предоставление семантической конфигурации для связок , но она не пролила свет.

РЕДАКТИРОВАТЬ: Хорошо, только что понял, что мне не нужно вручную регистрировать мое расширение в моем классе пакета. Теперь удалил этот код из моего приложения, но все равно получаю то же исключение.

1 Ответ

1 голос
/ 03 декабря 2011

Хорошо, после перечитывания базовой установки, кажется, все было правильно, кроме моего вызова функции ветки.

{{ knp_menu_render('main') }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...