2017-06-30 4 views
1

Ich fing an, PHP Slim-Framework v3 zu lernen. Aber ich finde es manchmal schwierig.SlimFramework php v3, withStatus (500) funktioniert nicht

Hier ist mein Code:

$app = new \Slim\App(["settings" => $config]); 
$app->get('/', function(Request $request, Response $response, $args = []) { 
    $error = array('result' => false, 'message' => 'Bad Request', 'dev'=>'', 'data' => []); 
    $response->withStatus(500)->getBody()->write(json_encode($error)); 
}); 

Jetzt habe ich mit dem Status 500 dem Benutzer reagieren soll, wenn immer ich Probleme in Dienst. Aber leider funktioniert das nicht. Obwohl ich eine Antwort erhalte, gibt es 200 statt 500 zurück.

Mache ich etwas falsch oder fehle ich etwas?

Ich habe versucht, andere Probleme zu untersuchen, aber ich habe nichts gefunden, was mir geholfen hat.

+0

Abgesehen (?): Wenn die Anforderung schlecht ist, 500 ist die falsche Antwort-Code; 400 ist richtig. – deceze

+0

Ja, das stimmt. Aber ich war nicht mein Dienst, um den unterschiedlichen Fehlercode zurückzugeben, wenn die URL nicht übereinstimmt. Daher habe ich im SLIM-Dokument gelesen, dass withStatus (500) das tun wird. Aber nicht sicher, warum das nicht funktioniert. –

+0

@deceze - Ich hoffe, du hast das, was ich sagen wollte. Ich will nur den Status ändern mit withStatus und das funktioniert nicht –

Antwort

2

Das Response-Objekt ist unveränderbar, daher kann es nicht geändert werden. Die Methoden with*() geben eine Kopie des Response-Objekts mit dem geänderten Wert zurück.

$app->get('/', function(Request $request, Response $response, $args = []) { 
    $error = array('result' => false, 'message' => 'Bad Request', 'dev'=>'', 'data' => []); 
    $response->write(json_encode($error)); // helper method for ->getBody()->write($val) 
    return $response->withStatus(500); 
}); 

Siehe this answer warum Sie nicht brauchen, um den Wert auf write neu zuzuweisen.

Sie können auch withJson statt:

$app->get('/', function(Request $request, Response $response, $args = []) { 
    $error = array('result' => false, 'message' => 'Bad Request', 'dev'=>'', 'data' => []); 
    return $response->withJson($error, 500); 
}); 
+0

Vielen Dank. Das hat funktioniert. Ich habe das schon mal versucht, aber es scheint, als würde ich es falsch nennen. :-) –

+0

hey ich habe das gleiche Problem aber der Unterschied ist, dass ich es in meiner benutzerdefinierten Klasse tun muss. Wie schreibe ich meine Antwort ist $ Antwort -> getBody() -> schreiben (json_encode ($ this -> parseObject (703, 'Missing Params!')))). Ich möchte stattdessen einen Antwortcode hinzufügen, konnte aber nicht mit Ihrer Antwort arbeiten, irgendeine Idee? –