条件がある場合にすべてのリクエストをリダイレクトする方法があるかどうか知りたいです。たとえば、websiteDisabled = true のエンティティ User があるとします。私の知る限り、サービスからリダイレクトすることはできません。他に方法はありますか?
質問する
2589 次
1 に答える
5
イベントをリッスンするリスナーを作成しますkernel.request
(ドキュメントはこちら)。そのリスナーでは、リクエストとコンテナーにアクセスできるため、好きなことを何でもできます。kernel.request
Symfony の間、あなたにGetResponseEvent
.
Response
コントローラーで応答を返すのと同じように、このイベントにオブジェクトを設定できます。レスポンスを設定すると、Symfony はそれを返し、通常のリクエスト --> コントローラ --> レスポンス サイクルを経ません。
namespace Acme\UserBundle\EventListener;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\HttpKernel;
use Symfony\Component\DependencyInjection\ContainerAware;
class UserRedirectListener extends ContainerAware
{
public function onKernelRequest(GetResponseEvent $event)
{
if (HttpKernel::MASTER_REQUEST != $event->getRequestType()) {
// don't do anything if it's not the master request
return;
}
$user = $this->container->get('security.context')->getToken()->getUser();
// for example...
if ($user->websiteDisabled === false) {
return;
}
// here you could render a template, or create a RedirectResponse
// or whatever it is
$response = new Response();
// as soon as you call GetResponseEvent#setResponse
// symfony will stop propogation and return the response
// no other framework code will be executed
$event->setResponse($response);
}
}
また、設定ファイルの 1 つにイベント リスナーを登録する必要があります。次に例を示します。
# app/config/config.yml
services:
kernel.listener.your_listener_name:
class: Acme\UserBundle\EventListener\UserRedirectListener
tags:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
于 2013-07-16T01:29:15.163 に答える