LaravelのFormで確認画面にRedirectしたときに、入力した値を引き継ぐ方法をメモ。
サンプルコード
入力画面(/form)と確認画面(/form/confirm)を作成します。
app\Http\routes.php
// 入力画面 Route::get('/form', 'FormController@getIndex'); Route::post('/form', 'FormController@postIndex'); // 確認画面 Route::get('/form/confirm', 'FormController@getConfirm');
app\Http\Controllers\FormController.php
確認画面へのリダイレクトにwithInput()を付けて、確認画面でSession::get(‘_old_input’)でpostした内容を取得します。
<?php namespace App\Http\Controllers; use Request; use Redirect; use Session; class FormController extends Controller { // 入力画面 public function getIndex() { return view('form.index'); } // 入力画面post時 public function postIndex() { // postデータ取得 $data = Request::all(); // エラーチェックなどの処理 // 確認画面へリダイレクト return redirect('/form/confirm')->withInput(); } // 確認画面 public function getConfirm() { // post内容を取得 $postdata = Session::get('_old_input'); return view('form.confirm', compact('postdata')); } }
resources\views\form\index.blade.php
{!! Form::open() !!} <div class="form-group"> <div class="form-key"> {!! Form::label('name', '名前:') !!} </div> <div class="form-value"> {!! Form::text('name', null) !!} </div> </div> <div class="form-group"> <div class="form-key"> {!! Form::label('birthday', '誕生日:') !!} </div> <div class="form-value"> {!! Form::text('birthday', null) !!} </div> </div> <div class="form-group"> <div class="form-key"> {!! Form::label('age', '年齢:') !!} </div> <div class="form-value"> {!! Form::text('age', null) !!} </div> </div> <div> {!! Form::submit('送信') !!} </div> {!! Form::close() !!}
resources\views\form\confirm.blade.php
postした内容は$postdataに入っています。
<div class="form-group"> <div class="form-key">名前</div> <div class="form-value"> {{$postdata['name']}} </div> </div> <div class="form-group"> <div class="form-key">誕生日</div> <div class="form-value"> {{$postdata['birthday']}} </div> </div> <div class="form-group"> <div class="form-key">年齢</div> <div class="form-value"> {{$postdata['age']}} </div> </div>
入力画面で以下のように入力後、送信してみます。
確認画面で以下のように表示できました。
注意点としては、postしたデータではなく一時的なセッションデータを使用しているだけなので、リロードをするとデータは消えます。
【参考サイト】
コメントが承認されるまで時間がかかります。