如何使用 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'));
我在使用 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'));