2012-09-12 1 views
7

Sto cercando di gestire gli errori in Ajax. Per questo, sto semplicemente cercando di riprodurre questo SO question in Symfony.Gestione degli errori in Ajax con il controller Symfony2

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

ma non riesco a capire che cosa il codice nel controller sarà simile in Symfony2 per innescare header('HTTP/1.0 419 Custom Error');. È possibile allegare un messaggio personale con questo, ad esempio You are not allowed to delete this post. Devo inviare anche una risposta JSON?

Se qualcuno ha familiarità con questo, gradirei davvero il vostro aiuto.

Molte grazie

risposta

12

nella vostra azione si può restituire un oggetto Symfony\Component\HttpFoundation\Response ed è possibile utilizzare il metodo setStatusCode o il secondo argomento del costruttore per impostare il codice di stato HTTP. Naturalmente se è anche possibile restituire il contenuto della risposta come JSON (o XML) se si desidera:

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

o

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; 
} 

Aggiornamento: Se si sta utilizzando Symfony 2.1 è possibile restituire un'istanza di Symfony\Component\HttpFoundation\JsonResponse (Grazie a questa opzione per il suggerimento). L'utilizzo di questa classe ha il vantaggio che invierà anche l'intestazione corretta Content-type. Per esempio:

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

per quanto ne so in Symfony 2.1 è possibile restituire 'JsonResponse()' –

+0

Grazie per il suggerimento. Ho aggiornato la mia risposta. –