目次
Laravelの記事一覧は下記
PHPフレームワークLaravelの使い方
Laravelバージョン
動作確認はLaravel Framework 7.19.1で行っています
フラッシュデータ
Laravelでは直後のHTTPリクエストの間だけセッションにデータを保存し、それ以降は削除されるフラッシュデータという仕組みが提供されています
これまで下記記事で扱ってきました
Laravelでリクエストデータを取得する
Laravelで入力値エラーチェック(validate)を実装する
Laravelでリダイレクトを使う
いずれの場合もリクエストデータをフラッシュデータとして保存していましたが、今回はリクエストデータではなく、サーバサイドで好きな値をフラッシュデータに格納します
前提条件
eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)
本記事は上記が完了している前提で書かれています
プロジェクトの作成もapacheの設定も上記で行っています
Controllerにメソッド追加
(1) /sample/app/Http/Controllers/SampleController.phpにflashメソッド、flash2メソッドを追記
public function flash(Request $request)
{
$request->getSession()->flash('key', 'value1');
$request->getSession()->flashInput(array_merge($request->input(), ['key' => 'value2']));
return view('sample.flash');
}
public function flash2(Request $request)
{
return view('sample.flash2');
}
$request->getSession()->flash
でフラッシュデータに保存した場合、old関数で取得できません
$request->getSession()->flashInput
でフラッシュデータに保存した場合、old関数を使って取得します
(2) /sample/routes/web.phpに下記を追記
Route::get('sample/flash', 'SampleController@flash');
Route::get('sample/flash2', 'SampleController@flash2');
viewの作成
(1) /sample/resources/views/sample/flash.blade.phpファイル作成
<html>
<head>
<title>sample</title>
</head>
<body>
<div>{{ session('key') }}</div>
<div>{{ old('key') }}</div>
</body>
</html>
(2) /sample/resources/views/sample/flash2.blade.php
<html>
<head>
<title>sample</title>
</head>
<body>
<div>flash2です</div>
<div>{{ session('key') }}</div>
<div>{{ old('key') }}</div>
</body>
</html>
動作確認
http://localhost/laravelSample/sample/flash
実行結果
value1
value2
$request->getSession()->flash
$request->getSession()->flashInput
どちらで保存したフラッシュデータも出力されました
http://localhost/laravelSample/sample/flash2
実行結果
flash2です
value1
value2
続いてflash2にアクセスするとコントローラーで何も処理していないのにフラッシュデータが出力されました
フラッシュデータというのは直後のHTTPリクエストの間だけセッションにデータを保存されるものです
今アクセスしたflash2が直後のHTTPリクエストということです
Laravelで入力値エラーチェック(validate)を実装するでフォームリクエストクラスを使ってエラーチェックをしましたが、エラーチェックに引っかかるとリダイレクトされます。フォームリクエストクラスエラー存在時は、そのリダイレクトが直後のHTTPリクエストということになります
http://localhost/laravelSample/sample/flash2
実行結果
flash2です
続いてもう一度flash2にアクセスすると今度はvalue1、value2が出力されません
もうフラッシュデータを保存した直後のリクエストではないためです