Я пытаюсь встроить переключатель языка в основную навигацию, созданную с помощью KNPMenuBundle. Переводы выполняются с помощью JMSTranslationBundle. Оба работают нормально.
Я хочу создать переключатель языка с помощью конструктора меню, но генерация правильных маршрутов вызывает у меня некоторые головные боли.
Это мой сервис:
class MenuService
{
private $factory;
private $translator;
private $router;
public function __construct(FactoryInterface $factory, Translator $translator, Router $router)
{
$this->factory = $factory;
$this->translator = $translator;
$this->router = $router;
}
public function createMainMenu(RequestStack $requestStack, array $languages)
{
// Language Switcher - $languages === ['en', 'de']
$request = $requestStack->getCurrentRequest();
$routeName = $request->get('_route');
$menu->addChild('menu.language', array(
'uri' => '#',
'label' => '<i class=\'fa fa-flag-checkered\'></i> '.$this->translator->trans('menu.language.main'),
'extras' => array('safe_label' => true)
))
->setAttribute('class', 'dropdown singleDrop')
->setChildrenAttribute('class', 'dropdown-menu dropdown-menu-left')
;
foreach ($languages as $language)
{
$menu->getChild('menu.language')->addChild('menu.language.'.$language, array(
'route' => $this->router->generate($routeName, array_merge($request->get('_route_params'), ['_locale' => $language]))
));
}
}
И это мое определение службы
menu_builder:
class: AppBundle\DependencyInjection\MenuService
arguments: ['@knp_menu.factory', '@translator.default', '@jms_i18n_routing.router']
menu.main:
class: Knp\Menu\MenuItem
factory: ['@menu_builder', createMainMenu]
arguments: ['@request_stack', '%locales%']
scope: request
tags:
- { name: knp_menu.menu, alias: main }
Если я ввожу маршрутизатор, предоставленный JMSTranslationBundle, я получаю следующую ошибку:
Во время рендеринга шаблона возникло исключение ("Невозможно сгенерировать URL-адрес для именованного маршрута "/en/", поскольку такой маршрут не существует").
Если я использую маршрутизатор Symfony по умолчанию, я получаю это сообщение об ошибке:
Во время рендеринга шаблона возникло исключение («Невозможно сгенерировать URL-адрес для именованного маршрута «домашняя страница», поскольку такой маршрут не существует»).
Когда я отлаживаю маршрутизатор на консоли, это вывод:
en__RG__homepage ANY ANY ANY /en/
de__RG__homepage ANY ANY ANY /de/
Какой маршрутизатор необходимо использовать, чтобы маршрутизация работала?
$routeName
в'route' => $this->router->generate($routeName, array_merge($request->get('_route_params'), ['_locale' => $language]))
? - person lordrhodos   schedule 20.06.2017