【Laravel5.8】登録→確認画面→完了の3段階遷移でfileのsessionを保持したい
Laravel5.8において、
- 登録画面から入力してsubmit
- 確認画面でOKならsubmit
- テーブルにインサート完了・登録!
という3段階遷移でfileのsessionを保持したいパターンがよくあります。
しかし、sessionに
<input type="file" >
のものを保存することは難しい…
そのためCloud9とS3を使用してfileを保存している場合には、
というステップが最も簡単なようです。
public function confirmRequest(Request $request) { $this->validate($request, [ 'job_photo' => [ // 必須 'required', // アップロードされたファイルであること 'file', // 画像ファイルであること 'image', // MIMEタイプを指定 'mimes:jpeg,png', // 最小縦横20px 最大縦横500px 'dimensions:min_width=20,min_height=20,max_width=500,max_height=500', ] ]); //もし上記のバリデーションに引っ掛からなかったら以下のようにする if ($request->file('job_photo')->isValid([])) { //S3のjob_photoバケットに保管するパスを作成。なければ自動的にバケットを作ります。 $path = $request->job_photo->store('job_photo', 's3'); //上記で定義したpathを使用してpublicへ保管 Storage::disk('s3')->setVisibility($path, 'public'); $url = Storage::disk('s3')->url($path); //job_photo_urlという名前で$urlをsessionに保存 $request->session()->put('job_photo_url', $url); }else{ return redirect()->back(); } //file 以外のinputがあればexceptを使用してfileだけ除去 $job = new Job($request->except(['job_photo'])); //こちらでjob_photoFILEを保管 $job->job_photo = $url; $request->session()->put('job', $job); return view('job.confirmRequest'); } public function completeRequest(Request $request) { //sessionでjob_photo_urlを定義し、 $fileUrl = Session::get('job_photo_url'); $job = $request->session()->get('job'); $job->user_id = Auth::user()->id; //sessionに保管していたjob_photo_urlをテーブルにインサート $job->job_photo = $fileUrl; $job->save(); return view('job.completeRequest')); }
以上です。