#はじめに
Laravelを触り始めた時、簡単なCRUD機能を持ったToDoアプリを作りました。
その時、データベースに保存したり、削除したりできるような機能を実装していました。
しかし、保存ボタンや削除ボタンを押してもアクションの処理が走るだけで味気ないです。保存できても出来てなくてもリダイレクトしたページを表示するだけです。
そんな味気ないアプリケーション嫌だ!!!!「保存に成功しました」ぐらいのステータスメッセージを表示はしてほしい。。。メッセージがないと成功か失敗かわからないですよね。
しかし、意外とステータスメッセージを自力で実装することはめんどくさいです。その理由を2つあげます。。
- 保存処理が実行した時にメッセージの内容を設定します。保存処理では最後にリダイレクトすることがほとんどだと思うので、メッセージの内容をリダイレクト先のアクションへ渡します。受け取ったアクションからビューへ受け渡すようにコードを書かないといけません。
- ステータスメッセージの表示は基本的に一回だけです。保存処理後のリダイレクト先のページから他のページにアクセスする時にメッセージを表示されないようにしないといけません。
上記の理由でステータスメッセージを自力で実装するのはとてもめんどくさいです。。
そんな時にセッションのフラッシュデータです!!!
セッション?フラッシュデータ?となると思いますので、ざっくり説明します
セッションを使うことでWebブラウザが閉じるまで一時的にサーバー側にデータを保存することが出来ます
フラッシュデータは次のリクエストまでの間セッションに保存されるデータのことです。
次のリクエスト(他のページへアクセスなど)では削除されます。ですので、フラッシュデータは主にステータスメッセージなど継続しない情報にはもってこいです!!
ではフラッシュデータを使ってステータスメッセージを表示させる方法を解説します。
#フラッシュデータの渡し方
フラッシュデータの渡し方は主に3種類あります
##flashメソッドで渡す
Flashメソッドを使うとセッションへstatus
という名前のデータを保存できます。
status
の中身は処理が完了しました
です
$request->session()->flash('status', '処理が完了しました');
return redirect('/');
##スタティックメソッドを使う
Sessionクラスのflashメソッドを使うことでも値を渡すことができます
\Session::flash('flash_message', '処理が完了しました');
return redirect('/');
##withメソッドを使う
flash
メソッドと同じようにフラッシュデータを渡せるwith
メソッドもあります
return redirect('dashboard')->with('status', '処理が完了しました');
#ビューでの表示
次にビューでの表示の仕方について説明します
Bootstrapを使えばいい感じに表示してくれます
@if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endif
以上がフラッシュデータを使ったステータスメッセージの表示仕方です。
#おまけ
以下おまけです。
##フラッシュデータを1つ先のリクエストまで持続させたい場合
reflash
メソッドを使うと全フラッシュデータを次のリクエストまで保持できます。
$request->session()->reflash();
##特定のフラッシュデータのみ持続させたい場合
keep
メソッドを使います。
$request->session()->keep(['user', 'email']);
以上です!!!
ここまで読んでいただきありがとうございました!!
疑問、気になるところがございましたら、質問、コメントよろしくお願いします!!!