Devuelve http 500 con Slim framework

Si algo falla en mi API, quiero devolver una solicitud http 500.

$app = new Slim(); $app->halt(500); 

Todavía devuelve un http 200.

Si ejecuto este código:

  $status = $app->response()->status(); echo $status; //Here it is 200 $status = $app->response()->status(500); echo $status; //Here it is 500 

Todavía me da un http 200

$app->response()->status(500); es correcto, mira los documentos aquí .

Compruebe para asegurarse de estar llamando $app->run(); después de configurar el estado, esto preparará y generará el código de respuesta, los encabezados y el cuerpo.

Editar , asegúrese de definir una ruta o Slim generará la respuesta 404, esto funciona:

 require 'Slim/Slim.php'; \Slim\Slim::registerAutoloader(); $app = new \Slim\Slim(); $app->response()->status(500); $app->get('/', function () { // index route }); $app->run(); 

Si alguien todavía tiene este problema aquí es lo que terminé haciendo:

Configura un manejador de errores

     $ app-> error (función (Exception $ exc) use ($ app) {
        // códigos de excepción personalizados utilizados para el estado HTTP
        if ($ exc-> getCode ()! == 0) {
           $ app-> response-> setStatus ($ exc-> getCode ());
        }

        $ app-> response-> headers-> set ('Content-Type', 'application / json');
        echo json_encode (["error" => $ exc-> getMessage ()]);
     });

luego, cada vez que necesite devolver un estado HTTP en particular arrojar una excepción con el código de estado incluido:

     lanzar nueva Excepción ("Mi excepción personalizada con código de estado de mi elección", 401);

(Lo encontré en el foro de Slim)

Si tiene que presionar el encabezado después de $ app-> run (), siempre puede confiar en la función header php:

 header('HTTP/1.1 401 Anonymous not allowed'); 

Estado delgado del framework v2 wiki

 require 'Slim/Slim.php'; \Slim\Slim::registerAutoloader(); $app = new \Slim\Slim(); $app->get('/', function () use ($app) { $app->response()->setStatus(500); $app->response()->setBody("responseText"); return $app->response(); }); $app->run(); 

o

 $app->get('/', function () use ($app) { $app->halt(500, "responseText"); });