2012-09-12 4 views
7

Ajaxでエラーを処理しようとしています。このため、私はsymfonyにこのSO questionを再現しようとしています。Symfony2コントローラ内のAjaxでエラーを処理する

$.ajaxSetup({ 
    error: function(xhr){ 
     alert('Request Status: ' + xhr.status + ' Status Text: ' + xhr.statusText + ' ' + xhr.responseText); 
    } 
}); 

が、私は、コントローラのコードがheader('HTTP/1.0 419 Custom Error');をトリガするSymfony2の中でどのように見えるかを把握することはできません。例えばYou are not allowed to delete this postのような個人的なメッセージを添付することは可能ですか? JSON応答も送信する必要がありますか?

誰もがこれに精通している場合は、私は本当にあなたの助けに感謝します。

多くのおかげで、あなたのアクションで

答えて

12

あなたはSymfony\Component\HttpFoundation\Responseオブジェクトを返すことができますし、HTTPステータスコードを設定するsetStatusCode方法または第二のコンストラクタ引数を使用することができます。もちろん、もしあなたがしたい場合は、JSON(またはXML)などの応答の内容を返すことも可能である:

public function ajaxAction() 
{ 
    $content = json_encode(array('message' => 'You are not allowed to delete this post')); 
    return new Response($content, 419); 
} 

または

public function ajaxAction() 
{ 
    $response = new Response(); 
    $response->setContent(json_encode(array('message' => 'You are not allowed to delete this post')); 
    $response->setStatusCode(419); 
    return $response; 
} 

更新:あなたはsymfonyのを使用している場合2.1の場合、Symfony\Component\HttpFoundation\JsonResponseのインスタンスを返すことができます(ヒントのためのカタログのおかげで)。このクラスを使用すると、正しいContent-typeヘッダーも送信されるという利点があります。例:

public function ajaxAction() 
{ 
    return new JsonResponse(array('message' => ''), 419); 
} 
+3

symfony 2.1のAFAIKでは、 'JsonResponse()'を返すことができます。 –

+0

ヒントをありがとう。私は自分の答えを更新しました。 –

関連する問題