2017-12-13 10 views
0

をリダイレクトします:symfonyの2.8 - コントローラリスナー、コントローラは、後に、私は現在、すべてのアクションの前に実行する必要のあるコントローラリスナーを実装しようとしてる

class AuthenticationListener 
{ 
/** 
* @var TokenStorage 
*/ 
private $tokenStorage; 

/** 
* @var $controller 
* 
* Controller that is accessed 
*/ 
private $controller; 

/** 
* @var string $class full class path of controller 
*/ 
private $class; 

public function __construct(TokenStorage $tokenStorage) 
{ 
    $this->tokenStorage = $tokenStorage; 
} 

public function onKernelController(FilterControllerEvent $event) 
{ 
    // Get controller after redirect here? 
    $this->controller = $event->getController()[0]; 
    $this->class = get_class($this->controller); 
} 

} 

をしかし、リダイレクトがある場合には、このリスナーが受信ユーザーがターゲットとするコントローラの代わりにRedirectControllerを使用します。リダイレクトの後に来るコントローラの名前を得るためにとにかくありますか?

+0

FilterControllerArgumentsEventを使用して、リダイレクト先のルート名を取得できます。しかし、実際のコントローラーは少し難しいものになるでしょう。 – Cerad

+0

これは望ましくありません。なぜなら、routing.yml内のルートとリスナー間の暗黙的な結合を作成するからです。 URLのパスを変更すると、2つの場所でURLを変更する必要があります。 – markvdlaan93

+0

さて、なぜリダイレクトされたコントローラを取得しようとしていますか?結局のところ、最終的にリダイレクトが発生し、コントローラを取得します。 – Cerad

答えて

0

確かにこれは可能ですが、通常はRequest::getParameter('_controller')に電話をかけることができます。元のコントローラを入手する必要があります。

関連する問題