我前段时间构建了一个内核侦听器,将用户重定向到某种语言。
有几个页面没有翻译,用户不应该被重定向。当我使用 JMSI18nRoutingBundle 时,我想,这将是使用捆绑包中的 'options: { i18n: false }' 设置的最佳方式。
我需要能够在我的内核侦听器中读取当前路由的选项。这可能吗?
我前段时间构建了一个内核侦听器,将用户重定向到某种语言。
有几个页面没有翻译,用户不应该被重定向。当我使用 JMSI18nRoutingBundle 时,我想,这将是使用捆绑包中的 'options: { i18n: false }' 设置的最佳方式。
我需要能够在我的内核侦听器中读取当前路由的选项。这可能吗?
要首先获取路由选项,您必须获取路由集合,然后从路由集合中,您必须根据路由名称获取路由对象。
所以你的听众将依赖路由器。你的构造函数看起来像这样。
/**
* @var $routeCollection \Symfony\Component\Routing\RouteCollection
*/
private $_routeCollection;
function __construct(\Symfony\Bundle\FrameworkBundle\Routing\Router $router)
{
$this->_routeCollection = $router->getRouteCollection();
}
现在在您的侦听器方法中,您将需要请求对象来获取当前路由名称。例如,如果您的侦听器方法是 onKernelController()
function onKernelController(FilterControllerEvent $event)
{
/**
* @var $route \Symfony\Component\Routing\Route
*/
$route = $this->_routeCollection->get($event->getRequest()->get('_route'));
// @var $allOptions will have all the options for current route.
$allOptions = $route->getOptions();
// To get specific option you can use getOption()
$someSpecificOption = $route->getOption('<key>');
}