在我的Symnfony3項目中,我注意到在註冊過程中會生成一些事件,我可以重寫響應。例如。而不是呈現默認的樹枝模板和重定向,只是返回一個帶有successMessage的JsonResponse。Symfony 3:FOSSUserBundle獲取JsonResponse而不是重定向
所以我做了以下事件訂閱:
namespace AppBundle\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Event\FormEvent;
use AppBundle\Constants\AjaxJsonResponseConstants;
use Symfony\Component\HttpFoundation\JsonResponse;
use FOS\UserBundle\Event\FilterUserResponseEvent;
class UserRegistrationResponseChanger implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
$subscribedEvents=[
// FOSUserEvents::REGISTRATION_INITIALIZE=>[],
FOSUserEvents::REGISTRATION_COMPLETED=>[],
FOSUserEvents::REGISTRATION_SUCCESS=>["setJsonResponseOnSuccess",-1],
FOSUserEvents::REGISTRATION_FAILURE=>["setJsonResponseOnFailure",-1],
// FOSUserEvents::REGISTRATION_CONFIRM=>[],
// FOSUserEvents::REGISTRATION_CONFIRMED=>[]
];
}
public function setJsonResponseOnSuccess(FormEvent $formEvent)
{
$response=['status'=>AjaxJsonResponseConstants::AJAX_ACTION_SUCCESS,'message'=>"User Sucessfully Registered please check your mail."];
$response=new JsonResponse($response);
$formEvent->setResponse($response);
return $response;
}
public function setJsonResponseOnFailure(FormEvent $formEvent)
{
$response=['status'=>AjaxJsonResponseConstants::AJAX_ACTION_FAIL,'message'=>"You cannot register please try again later"];
$response=new JsonResponse($response);
$formEvent->setResponse($response);
return $response;
}
}
而且我services.yml
我已經把以下內容:
app.user_register.subscriber:
class: AppBundle\EventSubscriber\UserRegistrationResponseChanger
tags:
- { name: app.user_register.subscriber }
和命令
爲了在覆蓋如何響應將得到返回,但不知何故,它不能這樣做,並重定向到默認頁面。我試圖通過Ajax調用來實現註冊,而不是呈現註冊頁面和重定向。
當註冊成功時,您將獲得一個302重定向響應,否則爲一個BadRequest響應。如果您成功時不需要返回任何特定數據,則可以等待Ajax調用中的302,並以您需要的方式處理它,因爲您可以認爲它是成功的。讓我知道如果您的註冊錯誤偵聽器不能正常工作,我會用一個工作示例發佈一個答案。 –
我需要返回Json,因爲我想實現單頁面應用程序,所有「重定向」都將通過Javascript完成,而不是302重定向。 –