2012-09-12 14 views
7

Estoy tratando de manejar los errores en Ajax. Para esto, simplemente estoy tratando de reproducir este SO question en Symfony.Manejar errores en Ajax dentro del controlador Symfony2

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

pero no puedo averiguar cuál es el código en el controlador se vería en Symfony2 para desencadenar header('HTTP/1.0 419 Custom Error');. Es posible adjuntar un mensaje personal con esto, por ejemplo You are not allowed to delete this post. ¿Debo enviar una respuesta JSON también?

Si alguien está familiarizado con esto, agradecería mucho su ayuda.

Muchas gracias

Respuesta

12

En su acción puede devolver un objeto Symfony\Component\HttpFoundation\Response y se puede utilizar el método de setStatusCode o el segundo argumento del constructor para establecer el código de estado HTTP. Por supuesto, si también es posible devolver el contenido de la respuesta JSON (o XML) si quieres:

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

Actualización: Si está usando Symfony 2.1 puede devolver una instancia de Symfony\Component\HttpFoundation\JsonResponse (gracias a thecatontheflat por la pista). El uso de esta clase tiene la ventaja de que también enviará el encabezado Content-type correcto. Por ejemplo:

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

yo sepa en Symfony 2.1 se puede volver 'JsonResponse()' –

+0

Gracias por la pista. Actualicé mi respuesta. –

Cuestiones relacionadas