如何使用 bundle KnpMenu 在 Symfony (3.0) 中管理前缀

How to manage prefix in Symfony (3.0) with bundle KnpMenu

我在使用 Symfony 3.0 上的 KnpMenu 的路由中努力添加前缀,我的前缀是语言 ISO 首字母。

我收到类似的错误消息: 缺少一些强制参数(“_locale”)来为路由 "home"

生成 URL

找到解决方法,分享给大家:

在我的路由文件中我有:

#[my_project]\app\config\routing.yml    
my_app:
      resource: "@MyBundle/Resources/config/routing.yml"
      prefix: /{_locale}
      requirements:
        _locale: fr|en

在我的子路由文件中:

#[my_project]\src\MyBundle\Resources\config\routing.yml    
home:
  path: /home
  defaults: {_controller:MyBundle:Home:index}

我按照文档中的说明实现了菜单(请参阅:https://github.com/KnpLabs/KnpMenu

  #[my_project]\MyBundle\Menu\Builder.php
  namespace MyBundle\Menu;

  use Knp\Menu\FactoryInterface;
  use Symfony\Component\DependencyInjection\ContainerAwareInterface;
  use Symfony\Component\DependencyInjection\ContainerAwareTrait;

  class Builder implements ContainerAwareInterface{


      use ContainerAwareTrait;

      public function mainMenu(FactoryInterface $factory, array $options){


            $menu = $factory->createItem('root');

            $logger = $GLOBALS['kernel']->getContainer()->get('logger');
            $logger->info('in mainMenu');

            $session = $this->container->get('session');
            $locale = $session->get('_locale');

            $routeParameters = array('_locale'=>$locale);

            $menu->addChild('home', array('routeParameters' =>  $routeParameters,'route' => 'home'));

            return $menu;
        }
    }

我的问题的解决方案是 在方法 addChild() 所需的数组参数中实现 routeParameters 数组: $menu->addChild('home', array('routeParameters' => $routeParameters,'route' => 'home'));