我正在嘗試使用AJAX註冊用戶。Sf2:FOS UserBundle:註冊AJAX
我對FOSUserEvents::REGISTRATION_SUCCESS
創建一個事件偵聽所以我想知道的是一個AJAX請求已經提出,但在我的客戶端的響應不能使我滿意。
在這裏我的事件監聽器,請注意發送的響應是一個測試,所以當然不應該有「其他」條件。
<?php
namespace SE\AppBundle\EventListener;
use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Event\FormEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\RequestStack;
/**
* Ajax listener on FOS UserBundle registration
*/
class RegistrationListener implements EventSubscriberInterface
{
private $router;
public function __construct(RequestStack $RequestStack)
{
$this->requestStack = $RequestStack;
}
/**
* {@inheritDoc}
*/
public static function getSubscribedEvents()
{
return array(
FOSUserEvents::REGISTRATION_SUCCESS => 'onRegistrationSuccess'
);
}
public function onRegistrationSuccess()
{
$request = $this->requestStack->getCurrentRequest();
if ($request->isXmlHttpRequest()) {
$array = array('success' => true); // data to return via JSON
$response = new Response(json_encode($array));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
else{
$array = array('success' => false); // data to return via JSON
$response = new Response(json_encode($array));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
}
}
services.yml
:
se.app.listener.registration:
class: SE\AppBundle\EventListener\RegistrationListener
arguments: ["@request_stack"]
tags:
- { name: kernel.event_subscriber }
的javascript:
// Submit the request
$.ajax({
type : 'POST',
url : url,
data : data,
success : function(data, status, object) {
console.log('success');
console.log(data);
},
error: function(data, status, object){
console.log('error');
console.log(data);
}
});
首先奇怪的事情是,它會處於錯誤狀態。
的console.log
(數據)返回註冊成功頁面的DOM:
...
<p>Congrats [email protected], your account is now activated.</p>
...
那麼,這是否邏輯應該在這裏或者我應該重寫控制器?我究竟做錯了什麼?
太棒了!因此,最好使用事件偵聽器,而不是重寫方法,不是嗎?你是否能夠在其中一個fos用戶事件中捕獲表單錯誤? – Brieuc
看看我的編輯:),它完全取決於事件,我認爲沒有REGISTRATION_FAILURE事件,因此您可能需要重寫此方法。 – chalasr
謝謝你的明確答案。 – Brieuc