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 に答える