2012-11-12 3 views
6

Wenn etwas in meiner API schlecht geht, möchte ich eine http 500 Anfrage zurückgeben.Zurück http 500 mit Slim Rahmen

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

Es ist immer noch eine http zurückkehren 200.

Wenn ich diesen Code ausführen:

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

es mir stillt geben einen http 200

Antwort

6

Die $app->response()->status(500); richtig ist, die Dokumentation sehen here.

Überprüfen Sie, ob Sie nach dem Einstellen des Status $app->run(); aufrufen. Dadurch werden der Antwortcode, die Header und der Textkörper vorbereitet und ausgegeben.

bearbeiten, stellen Sie sicher, dass Sie eine Route oder dünne ausgeben wird die 404-Antwort definieren, das funktioniert:

require 'Slim/Slim.php'; 
\Slim\Slim::registerAutoloader(); 

$app = new \Slim\Slim(); 

$app->response()->status(500); 

$app->get('/', function() { 
    // index route 
}); 

$app->run(); 
+0

$ app = neu Slim(); \t \t $ app-> Antwort() -> Status (500); \t \t $ app-> run(); Es gibt immer noch eine http 200 in fiddler, aber die Web-Ansicht ist jetzt 404. Warum? – rubin

+0

Überprüfen Sie den Antwortcode mit HTTPLiveHeaders oder Firebug oder Chrome Dev Tools (F12). – MrCode

+0

Es gibt http 200 in Fiddler und in Firebug zurück. – rubin

2

Wenn Sie Header schieben nach $ app-> run() haben, können Sie immer verlassen sich auf die Funktionskopf php:

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

hast du es getestet? Es hat nicht für mich funktioniert. –

+0

Nein, ich habe einige Routen definiert, zum Beispiel: $ Rest-> Post ('/ Pfad', Funktion() verwenden ($ Rest, $ Variable) { ... wenn (etwas falsch) { Header ('HTTP/1.1 400 JSON ungültig'); exit(); } } – Chris

+0

Das funktionierte für mich, als Slims 'status()' und 'setStatus()' den Statuscode nicht ändern konnten.Für andere, beachten Sie, dass seit PHP 5.4 [http_response_code] (http://php.net/http_response_code) wie folgt verwendet werden kann: 'http_response_code (500);' – Cole

6

Wenn jemand dieses Problem weiterhin hat hier ist, was ich tun endete:

-Setup ein Fehler-Handler

 

    $app->error(function (Exception $exc) use ($app) { 
     // custom exception codes used for HTTP status 
     if ($exc->getCode() !== 0) { 
      $app->response->setStatus($exc->getCode()); 
     } 

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

dann, wann immer Sie brauchen eine bestimmte HTTP-Status zurückzukehren eine Ausnahme mit dem Statuscode werfen enthalten:

 

    throw new Exception("My custom exception with status code of my choice", 401); 

(Gefunden auf der Slim-Forum)

0

Schlanke Rahmen v2 wiki status

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(); 

oder

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