私は最も高い優先度を持つリスナを実装しました。ヘッダ値に応じてリスナがサーバからユーザをリダイレクトします。リスナーですべてのonKernelResponseをリダイレクトして実行する方法を教えてください。
これは多くのユーザーに影響するため、他のすべてのリスナーが実行される前にリダイレクトを実行したいと思います。特にリスナーのonKernelResponseも実行します。
私のリダイレクトが呼び出された瞬間に実際にユーザーをリダイレクトする方法はありますか? 私はRedirectResponseを使わないでリダイレクトできますか?しかし、どのように?
public function onKernelRequest(GetResponseEvent $event)
{
if (!$event->isMasterRequest()) {
return;
}
$request = $this->requestStack->getCurrentRequest();
$requestedWith = $request->headers->get('x-header-myfeature');
if (!empty($requestedWith)) {
$event->setResponse(new RedirectResponse($this->newUrltoRedirect));
}
}
リダイレクトが機能マインド、私は他のすべてのリスナーを実行し、例えばをトリガしないようにしたいですそこにメッセージを記録してください。
これ以上の残酷な方法を適用して、これ以上リダイレクトする必要はありません。
アイデア?
P.S. : 私は
public function onKernelResponse(FilterResponseEvent $event)
{
$response = $event->getResponse();
if ($response instanceof RedirectResponse) {
$this->logger->notice(' We want to redirect');
$event->stopPropagation();
}
}
を追加することを試みたが、私はプレーンなResponseオブジェクトではなくRedirectResponseオブジェクトを取得するので、それは動作しません。