我构建了一个kernel listener some time ago,将用户重定向到某种语言。
有几个页面没有翻译,用户不应该重定向。正如我使用JMSI18nRoutingBundle,我想,这将是使用捆绑包中的'options:{i18n:false}'设置的最佳方式。
我需要能够在内核侦听器中读取当前路由的选项。这可能吗?
答案 0 :(得分:3)
首先获取路线选项,您必须获得路线收集,并且从路线收集中,您必须根据路线名称获取路线对象。
因此,您的侦听器将依赖路由器。你的构造函数会看起来像这样。
/**
* @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>');
}