Laravel - 21. セッション - フラッシュデータ
引き続きセッションの使い方について学習していきましょう。Laravelのセッションを使ってフラッシュデータを作成できます。フラッシュデータとはリダイレクト先で参照可能なセッションデータです。フラッシュデータではリダイレクト後に自動でセッションから削除されるようになっています。フラッシュデータではデータの登録処理や更新処理、削除処理のようなリダイレクトを伴うケースで、画面にメッセージを出力する際に利用できます。
ここでは app/Http/Controllers/HelloController.php
の store
アクションを修正して、フラッシュデータを使って登録完了メッセージを表示してみます。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use App\Message;
use App\Http\Requests\MessageRequest;
class HelloController extends Controller
{
public function index(Request $request)
{
$count = $request->session()->get("count", 0);
$count++;
$request->session()->put("count", $count);
$title = "Hello Model!";
$messages = Message::orderBy("id")->get();
return view("hello/index", compact("title", "messages"));
}
public function create()
{
return view("hello/create");
}
public function store(MessageRequest $request)
{
$text = $request->input("text");
$message = new Message();
$message->text = $text;
$message->save();
$request->session()->flash("message", "Added message.");
return redirect("/hello");
}
}
store
アクションでは Message
モデルを使って新規レコードを登録したあと、セッションにフラッシュデータを保存しています。セッションにフラッシュデータを保存するには flash
メソッドを使います。
$request->session()->flash("message", "Added message.");
flash
メソッドは通常の put
メソッドと同様に第1引数にキー、第2引数に保存する値を指定します。フラッシュデータとして保存されたデータはリダイレクト先の処理の中から参照できます。ここでは index
アクションにリダイレクトしているので、 index
アクションから呼び出されるビューファイル( resources/views/hello/index.blade.php
)の中でフラッシュメッセージを表示します。
@extends('layout.app')
@section('content')
<h1>{{ $title }}</h1>
@if (Session::has("message"))
<p>{{ session("message") }}</p>
@endif
<ul>
@foreach ($messages as $message)
@if (mb_strlen($message->text) >= 5)
<li>{{ $message->text }}</li>
@endif
@endforeach
</ul>
<hr>
<p>Count: {{ session("count") }}</p>
@endsection
上記のビューにおいては、先頭部分で @if
ディレクティブと Session
ファサードを使ってセッションに "message"
キーが存在するか確認しています。セッションに "message"
キーが存在する場合は session
関数を使って "message"
キーの値を出力しています。
フラッシュデータとして保存した値は自動的に削除されます。
動作確認
それでは HelloController
の store
アクションとビューファイル( resources/views/hello/index.blade.php
)を修正したので、PHPのビルトインWebサーバを使ってWebアプリケーションを起動してみましょう。次のようにコマンドを入力します。
$ php artisan serve --host 0.0.0.0
Laravel development server started: http://0.0.0.0:8000
続いてブラウザを起動してWebアプリケーションにアクセスしてみましょう。
http://localhost:8000/hello/create
入力フォームが表示されるので、メッセージに Konnichiwa
と入力して送信ボタンをクリックします。
index
アクションにリダイレクトされ、登録完了メッセージ( Addedd message.
)が表示されます。続いてブラウザのリロードボタンを押してみましょう。
さきほどの登録完了メッセージが非表示となります。このようにフラッシュデータはリダイレクト先でのみ参照可能なセッションデータとして利用できます。
まとめ
- フラッシュデータとはリダイレクト時など、次のリクエストのためにセッションにデータを保存する仕組み
- アクションメソッドにおいては
$request->session()->flash
メソッドを使ってフラッシュデータを保存できる - フラッシュデータは次のリクエストの間のみ使用可能であり自動的に削除される