Laravel - 20. セッション
ここからはセッションの取り扱い方法について学習します。通常のPHPの開発においては session_start
関数や $_SESSION
変数を通じてセッションにアクセスします。Laravelではセッションの操作方法も Request
インスタンスの session
メソッドや Session
ファサードなどを使って操作できるようになっています。
ここでは app/Http/Controllers/HelloController.php
の index
アクションを修正してセッションの挙動を確認してみることにします。
<?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();
return redirect("/hello");
}
}
アクションメソッドにおいて、セッションにアクセスするには $request->session()
メソッドを呼び出します。$request->session()
メソッドは戻り値にセッションデータの保存先を示す Store
インスタンスを返すので、 Store
インスタンスの get
メソッドを使ってセッションからキーを指定してデータを取得したり、 put
メソッドを使ってセッションにキーとデータを保存したりします。
index
アクションにおいては $request->session()->get("count", 0);
と呼び出すことでセッションから "count"
というキーでデータを取得しています。この get
メソッドは第1引数にキーを受け取り、第2引数でデータの初期値を指定します。 get("count", 0)
と引数を指定することで、セッションに "count"
キーが存在しない場合は、初期値として 0
が返却されるようになります。
また $count
変数の値をインクリメントした後、 $request->session()->put("count", $count);
と呼び出すことでセッションに "count"
というキーで $count
変数の値を保存しています。
続いて index
アクションの表示先となるビューファイル( resources/views/hello/index.blade.php
)を編集します。
@extends('layout.app')
@section('content')
<h1>{{ $title }}</h1>
<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
ここでは session
関数を使って "count"
キーの値を取得しています。
<p>Count: {{ session("count") }}</p>
このようにBladeのビューファイルにおいても簡単にセッションにアクセスできます。
動作確認
それでは HelloController
の index
アクションとビューファイル( 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
画面の下部に Count: 1
が出力されているのがわかります。この状態でブラウザのリロードボタンをクリックしてみましょう。
そうすると再び HelloController
の index
アクションが呼び出されるのでセッションに保存している "count"
キーの値がインクリメントされます。
まとめ
- セッションを操作するクラスやメソッドも用意されている
- アクションメソッドにおいては
$request->session()
とすることでセッションにアクセスできる - ビューにおいては
session
関数やSession
ファサードによってセッションにアクセスできる