お世話になっております。
表題の通りなのですが、Laravelで
情報入力ページ → 画像アップロード画面 → 確認画面 → 完了画面
という4つのページを作成しています。
バリデーションはFormRequestを使っていて、Controllerの引数にTestFormRequest $requestとして機能させています。
1.情報入力ページへはURLでのアクセスで http://aaa.com/?test=123 のような形でアクセスし、
testの値によってバリデーションをかけています。test= のように消したら「見つからない」、 test=aaaaaのように文字列にしたら「不正」と出しています。
時々URLを直接実行するとtestがないとバリデーションに引っかかるときがあります。リロードすると治ります。
入力ページには名前とメールアドレスの入力フォームがあり、必要項目を入力するとボタンが表示されてpostで画像アップロード画面へデータを送信します。
- 名前とメールアドレスのバリデートはここで実行していて、もし不備があれば一つ前のページにリダイレクトされます。
FormRequestの機能で自動的にwithErrorsとwithInputが生成され、自動的に1つ前のページに戻るようになっています。
- 問題がなければ画像をアップロードフォームが表示され、同じくバリデートでjpegやgif,pngを判定して、確認画面へ飛びます。
pdfをアップロードしたり、画像以外をアップしたり、問題があれば、1つ前の「画像アップロード画面」へリダイレクトし、再度画像の選択を促します。
しかし、画像アップロード画面へリダイレクトされた時点で、POSTデータが消えてしまうので、バリデートを行うデータが空になってしまって続けてバリデートエラー、
さらに「前のページ」にリダイレクトするがPOSTデータが空なのでバリデートエラー。また確認ページへ飛び、リダイレクトしてアップロード画面へ…
の繰り返しで無限ループになってしまいます。
POSTデータを受け渡そうとしてSession::putなどを使ったりしていますが、storage/framework/session以下に作られるデータを見ても、中に登録したデータが書き込まれておらず、結局更新したらデータが消えてしまったりします。
上記のようなページではどのように構成するとよいでしょうか?
少しややこしいので以下に質問内容をまとめさせていただきます。
☆時々URLを実行すると「testがない」とバリデーションに引っかかるときがあるのはなぜ?リロードすると直る。
☆リダイレクトしてもデータをやり取りするには?
情報の過不足があれば追記させていただきますので、ご教示お願い致します。
追記:
新たに作成したFormRequestクラスに以下を追加して、大元のFormRequestのvalidationDataを上書きし、
このようにしてみました。
$this->all()にバリデーションデータが入っており、これをrules等のその後の処理に送るそうなので、ここで空になっているかどうかをチェックし、
リダイレクト前のページで格納したwithInputをSession::get('_old_input');で取得してみました。
PHP
1 protected function validationData() 2 { 3 $data = $this->all(); 4 5 if(empty($data)){ 6 $data = Session::get('_old_input'); 7 8 if($data === null){ 9 $data = []; 10 } 11 } 12 }
こちらだとリダイレクトされたばかりの状態だと挙動としては問題なさそうでした。
しかし、1回目だけ問題ない状態で、この状態でリロードするとSessionからもデータが消えてしまうので
データを取ることができず、だめでした。
引き続き回答をお待ちしております。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。