2016-05-06 2 views
2

フォームを別のルートに送信するビューがあり、フォーム内のすべてのデータが正しいかどうかを確認しますが、そうでない場合は、このルート(/ check)を使用してビューにリダイレクトする必要があります。私はこのコードをキャッチすることができますし、どこに問題があるのか​​を知ることができます(間違ったデータ、フォームが埋め込まれていない...)。 も200を返すという問題があります。Slim v3のリダイレクトの状況コードの取得

ルートは次のように示しています。それはあなたが現在のルートでそれを変更しない場合は、デフォルトの200になるよう

$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

あなたは、 ''/check''ではなく ''/access''にリダイレクトすることに気付きましたか? – jmattheis

+0

フォームとアクセスの両方が同じビューを読み込みます。しかし、はい、私はそれについて気づいていませんでした。 – legomolina

答えて

2

にResponseCodeは、現在の応答からです。 応答オブジェクトはすべてのリクエストで作成されるため、以前に入力した値は保存されません。

あなたはリダイレクトとその

  • クライアント要求/check
  • サーバーの応答のようにそれを取ることができ、403
  • クライアントはリダイレクトし、/form
  • <を要求 - ここにあなたがすることはできません、今ありますリダイレクトの403ステータスコードを知っている。

?error=trueのようなURLパラメータ、セッションまたはCookieを使用できます。

OR:

いけないリダイレクトとも/formにポストを追加し、そこにそれを検証します。

+0

Mmm、ok、私はクエリパラメータを使用しますが、リダイレクトするページがそれを受け取っていない場合、どこでステータスコードを使用できますか?その目的は何ですか?ありがとうございます – legomolina

+2

ステータスコードはサーバーではなくブラウザに送信されます。 –

+2

基本的に、エラーがあればユーザー/ブラウザに通知するためです。 – jmattheis

関連する問題