ユーザーを特定の言語にリダイレクトするために、しばらく前にカーネルリスナーを作成しました。
翻訳がなく、ユーザーがリダイレクトされるべきではないページがいくつかあります。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>');
}