2016-05-06 4 views
2

Ich habe eine Ansicht, die ein Formular an eine andere Route sendet und überprüft, ob alle Daten im Formular korrekt sind, aber wenn nicht, muss diese Route (/ überprüfen) auf die Ansicht mit umleiten das Formular (/ Formular) mit dem Code XXX, damit ich diesen Code abfangen kann und ich weiß, wo das Problem liegt (falsche Daten, Formular nicht ausgefüllt ...). Das Problem ist, dass $response->getStatusCode(); auch 200 zurückgibt.Abfangen von Statuscode von Umleitung in Slim v3

Routen zeigen, wie folgt aus:

$app->get('/form', function($request, $response, $arguments) { 
    $error = array("error" => false); 
    echo $response->getStatusCode(); //Always print 200 

    if($response->getStatusCode() == XXX) 
     $error["error"] = true; 

    return $this->view->render($response, "form.php", $error); 
}); 

$app->post('/check', function($request, $response, $arguments) { 
    return $response->withHeader('Location', '/form')->withStatus(403);  
}); 
+0

Haben Sie festgestellt, dass Sie auf ''/access'' in ''/check'' und nicht auf ''/form'' umleiten – jmattheis

+0

Sowohl Formular als auch Zugriff laden dieselbe Ansicht. Aber ja, das ist mir nicht aufgefallen. – legomolina

Antwort

2

Responsecode aus der aktuellen Antwort ist, so dass es Standard-200 ist, wenn Sie es nicht in der aktuellen Route ändern. Das Antwortobjekt wird in jeder Anforderung erstellt, sodass die zuvor eingegebenen Werte nicht gespeichert werden.

Sie es so, dass mit einem Redirect /check

  • Server Antwort

    • Client-Anfrage nehmen und 403
    • -Client leitet und fordert /form
    • < - hier gibt es jetzt sind, können Sie nicht kenne den 403 Status Code in der Weiterleitung.

    Sie können URL-Parameter wie ?error=true, eine Sitzung oder Cookies verwenden.

    OR:

    Dont umleiten und die Post auch dort zu /form und validieren hinzufügen.

  • +0

    Mmm, ok, ich werde Abfrageparameter verwenden, aber wo kann ich den Statuscode verwenden, wenn die Seite, die Weiterleitungen nicht akzeptiert? Was ist der Zweck? Danke – legomolina

    +2

    Statuscode wird zum Browser, nicht zum Server gesendet. –

    +2

    Grundsätzlich gibt es eine Benachrichtigung für den Benutzer/Browser, falls Fehler auftreten. – jmattheis