はじめに
flashメソッドを使って、入力フォームに前回入力した内容を表示する方法を説明します。
flashメソッドとは
フォームに入力された値を「フラッシュデータ」として、セッションに保存する機能を持ったメソッドです。フラッシュデータは、「次に表示されるときまで値を保持し、それ以降はデータが消える」機能を持ちます。
説明
1回目フォーム送信時、$request->flash();
で入力した内容をセッションに保存します。
そして、2回目フォーム送信でoldメソッド
を使ってflashメソッドで保存したデータを取得して表示させます。
(1回目フォーム送信時、oldメソッドで取得できる値がないため特に表示されない)
注意点としては、oldメソッド
が呼び出されるのは$requets->flash();
が実行される前で、この時点でoldメソッド
で取得する値は、送信されるフォームデータではありません。
取得している値は、前回フォームが送信された際にフラッシュデータに保管された値と言うことです。
<body>
// 前回入力した内容をここに表示する
p>{!!$beforInputData!!}</p>
<form action="/hello" method="post">
@csrf
<div>NAME:<input type="text" name="name" value="{{old('name')}}"></div>
<div>MAIL:<input type="text" name="mail" value="{{old('mail')}}"></div>
<input type="submit">
</form>
<hr>
<ol>
// 入力内容を表示
@foreach($form as $key => $value)
<li>{{$key}}:{{$value}}</li>
@endforeach
</ol>
</body>
public function index(Request $request)
{
$beforInputData = '';
$form=[];
if ($request->isMethod('post'))
{
// リクエストよりname、mail値を取り出す
$form = $request->only(['name', 'mail']);
// oldを使って前回入力した値(フラッシュデータ)を取得
$beforInputData = old('name') . ', ' . old('mail');
// 画面出力データセット
$data = [
'beforInputData'=>$beforInputData,
'form'=>$form,
];
// フラッシュデータとしてセッションに保存
$request->flash();
return view('test.index', $data);
}
$data = [
'msg'=>$msg,
'form'=>$form,
];
return view('test.index', $data);
}
結果
結果は下記になります。
入力フォーム上部に表示されている値が、前回フォームに入力したフラッシュデータになります。
参考