質問: ~~~~~遷移元の画面イメージ~~~~~ ~~~~~リダイレクト部分~~~~~ if (エラーならば) { return redirect()->back()->withErrors($messages)->withInput(); } 上記のように実装しており、エラーなら遷移元に戻っているのですが、 戻ったときに$_POSTの中身が存在しません。 通常の遷移の場合だと$_POSTの中身は存在します。 redirect時に遷移元の画面に$_POSTデータを渡すためにどのようなことをすればよいでしょうか。
回答: こんにちは。 残念ですが、リダイレクト時にPOSTのデータは受け継ぐことはできません。 「HTTP通信はステートレスな通信」と言われますが、リダイレクト時に何がおきてるかを 考えると、理解いただけると思います。 ユーザ(ブラウザ) | サーバ *-------------------------------------* 1サーバへPOST | | 2POSTデータ拾って処理 | 3リダイレクトのレスポンス生成 4レスポンス受け取り | 5HTTPヘッダの | LOCATION先へ | リダイレクト | 6リダイレクトのリクエスト受信 *-------------------------------------* というわけで、リダイレクトは一度ブラウザに戻ってリクエストを投げなおします。 HTTP通信は、 「リクエストを送って、レスポンスをもらって、はい、セッション終わり。」 の仕組みですから、 ブラウザがリダイレクト先へリクエスト投げなおすときに、前回のPOSTデータは知らないのです。 知らないから、HTTPリクエストのボディ部は空っぽです。 そのため、リダイレクト先のサーバでは、$_POST には何も入ってないのです。 もしも状態保存が必要でしたら、リダイレクト先URLにGETパラメタとして付与して、$_GET で受け取るようにするか、rihitoさんのご提案どおり、リダイレクトのレスポンス返却時に、必要なパラメタをSet-Cookie して、リダイレクト先で取り出すなどの対応が必要です。