質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

4回答

37716閲覧

redirectで画面を戻した場合に入力値が引き継がれません

red13

総合スコア79

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2016/02/19 01:31

~~~~~遷移元の画面イメージ~~~~~

<form name="testForm" method="post"> <input type="text" name="test" value="{{ $_POST['test'] }}"> </form>

~~~~~リダイレクト部分~~~~~
if (エラーならば) {
return redirect()->back()->withErrors($messages)->withInput();
}

上記のように実装しており、エラーなら遷移元に戻っているのですが、
戻ったときに$_POSTの中身が存在しません。
通常の遷移の場合だと$_POSTの中身は存在します。
redirect時に遷移元の画面に$_POSTデータを渡すためにどのようなことをすればよいでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

こんにちは。
残念ですが、リダイレクト時にPOSTのデータは受け継ぐことはできません。

「HTTP通信はステートレスな通信」と言われますが、リダイレクト時に何がおきてるかを
考えると、理解いただけると思います。

ユーザ(ブラウザ) | サーバ
-------------------------------------
①サーバへPOST   |
| ②POSTデータ拾って処理
| ③リダイレクトのレスポンス生成
④レスポンス受け取り |
⑤HTTPヘッダの   |
LOCATION先へ    |
リダイレクト     | ⑥リダイレクトのリクエスト受信
-------------------------------------

というわけで、リダイレクトは一度ブラウザに戻ってリクエストを投げなおします。

HTTP通信は、
「リクエストを送って、レスポンスをもらって、はい、セッション終わり。」
の仕組みですから、
ブラウザがリダイレクト先へリクエスト投げなおすときに、前回のPOSTデータは知らないのです。
知らないから、HTTPリクエストのボディ部は空っぽです。

そのため、リダイレクト先のサーバでは、$_POST には何も入ってないのです。

もしも状態保存が必要でしたら、リダイレクト先URLにGETパラメタとして付与して、$_GET で受け取るようにするか、rihitoさんのご提案どおり、リダイレクトのレスポンス返却時に、必要なパラメタをSet-Cookie して、リダイレクト先で取り出すなどの対応が必要です。

投稿2016/02/19 02:41

編集2016/02/19 02:43
Toyoshima

総合スコア422

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

red13

2016/02/19 03:59

GETで渡してGETで受け取るのが現状と似ているため、 そのほうが良いかもしれませんね。
guest

0

すでに解決済みとなっていますが、old('test')で取れますよー。
またcontrollerで取得したいときはRequestのオブジェクトのoldメソッドで取れます

投稿2016/02/19 05:42

編集2016/02/19 05:49
fagai

総合スコア2158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

red13

2016/02/19 06:33 編集

old('test')はbladeのようですね。 コントローラ等ではRequest::old('test')で取得できるようですね。 回答ありがとうございます。
guest

0

$_POSTではありませんが似たような状態でデータを取得することが出来ました。
withInput()を付けてredirectをするとセッション内に「_old_input」というデータが作成されました。
$_POST['test']の取得が
Session::get('_old_input')['test']で取得できました。
今回はこちらのセッション情報を使用させていただきます。
回答ありがとうございました。

投稿2016/02/19 04:28

red13

総合スコア79

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

cookieに値を保存しておくのはダメですか?

投稿2016/02/19 02:04

rihito

総合スコア34

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

red13

2016/02/19 02:31

現状は$_POSTで値をやりとりすることしか考えていません。 cookieは最後の手段にするかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問