Symfony 5.0 и KnpMenuBundle - как настроить - PullRequest
1 голос
/ 14 января 2020

В приложении 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 - какой там будет правильный синтаксис / путь?

1 Ответ

1 голос
/ 14 января 2020

Конфигурация для KnpMenuBundle является необязательной. Вот почему файл конфигурации не создан. В Symfony 4 и 5 вы можете просто добавить файл конфигурации yaml в каталог config / packages вручную. Это будет автоматически прочитано. Хорошее имя для этого файла может быть 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 ).

...