概要
- セッションの
flash()
メソッドは、put()
メソッドと同じくセッションにキーと値のデータを登録できる - ただしそのデータは、次のリクエストの間だけ保存され、その後は削除される
- このため
flash
はコントローラー処理結果の通知などに使われる flash
の操作はsession()
グローバルヘルパーを使うが、Request
インスタンス経由でもよい
基本形
flashへの登録
session()->flash('キー', 値);
$request->session()->flash('キー', 値);
flashのデータ存在確認
session()->has('キー')
flashのデータ参照
session()->get('キー')
実装例
ビュー
ビューから見た動作は以下の通り
- GETリクエストでルーティングされ、フォームを表示する
- ユーザー名を入力後に送信ボタンを押すと、ユーザー名のバリデーション用コントローラーに制御を移す
- バリデーションの結果、このページにリダイレクトされ、結果に応じて
$errors
かflash
の内容が表示される $errors
はバリデーション結果が妥当でない時に自動でメッセージが登録されるflash
はバリデーション結果が妥当な時にコントローラーでメッセージを登録する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>{{ $title }}</title> <style> .error { color: red; } .success { color: blue; } </style> </head> <body> {{-- エラーメッセージ --}} @foreach ($errors->all() as $error) <p class="error">{{ $error }}</p> @endforeach {{-- 成功メッセージ --}} @if (session()->has('success')) <p class="success">{{ session()->get('success') }}</p> @endif <h1>{{ $title }}</h1> {{-- 入力フォーム --}} <form method="post"> @csrf <input type="text" name="user_name" placeholder="ユーザー名10文字以内"> <input type="submit" value="送信"> </form> </body> </html> |
表示アクション
最初のルーティングで呼ばれ、ビューを初期状態で表示する。
1 2 3 |
public function flashSample() { return view('samples.flash_sample', ['title' => 'flashのサンプル']); } |
バリデーションアクション
フォームから呼び出され、バリデーションのみを行い、元のページへリダイレクトする。
- バリデーション結果が妥当でなければ、
$errors
にメッセージが登録され、初期ページにリダイレクト - バリデーション結果が妥当な時は
flash
にメッセージを登録して初期ページにリダイレクト
1 2 3 4 5 6 7 8 9 |
public function flashResult(Request $request) { $request->validate([ 'user_name' => ['required', 'max:10'], ]); session()->flash('success', '正しく入力されました'); return redirect('/flash_sample'); } |