2

我前段时间构建了一个内核侦听器,将用户重定向到某种语言。

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

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

4

1 回答 1

4

要首先获取路由选项,您必须获取路由集合,然后从路由集合中,您必须根据路由名称获取路由对象。

所以你的听众将依赖路由器。你的构造函数看起来像这样。

/**
 * @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>');
}
于 2013-08-07T18:26:20.807 回答