security.authentication.success イベントをリッスンしています。顧客がログインするたびに、彼がまだ主要な情報を取得しているかどうかを確認する必要があります。そうでない場合は、作成用のフォームにリダイレクトしたいと思います。正常に実行されていますが、どのようにイベントからリダイレクトできますか? Redirect オブジェクトを返すだけでは機能しません。
サービス:
applypie_userbundle.newuser_listener:
class: Applypie\Bundle\UserBundle\EventListener\NewUserListener
arguments: [@router]
tags:
- { name: kernel.event_listener, event: security.authentication.success, method: onLogin }
リスナー:
namespace Applypie\Bundle\UserBundle\EventListener;
use Symfony\Component\Security\Core\Event\AuthenticationEvent;
use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\Router;
class NewUserListener
{
protected $context;
protected $router;
public function __construct(Router $router)
{
$this->router = $router;
}
/**
* @param AuthenticationEvent $event
*
* if current user neither have an applicant row or an company row, redirect him to create applicant row
*/
public function onLogin(AuthenticationEvent $event)
{
$user = $event->getAuthenticationToken()->getUser();
if(!$user->getApplicant() && !count($user->getCompanies()))
{
return new RedirectResponse($this->router->generate('applypie_user_applicant_create'));
}
}
}