访问内核侦听器中的路由选项

时间:2013-05-13 10:21:32

标签: events symfony internationalization routing symfony-2.1

我构建了一个kernel listener some time ago,将用户重定向到某种语言。

有几个页面没有翻译,用户不应该重定向。正如我使用JMSI18nRoutingBundle,我想,这将是使用捆绑包中的'options:{i18n:false}'设置的最佳方式。

我需要能够在内核侦听器中读取当前路由的选项。这可能吗?

1 个答案:

答案 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>');
}