2020/08/12
セッションとは、データを保存しておく仕組みのことで、リロードしたり複数ページにまたがってもデータは消えません。
以下のようなシステムでセッションが使われています。
- アクセスカウンター
- ページが切り替わっても、アクセス数はリセットされずどんどん加算されます。
- ログイン機能
- ページが切り替わっても、ログイン状態はキープします。
- ショッピングカート
- ページが切り替わっても、商品はカートに入ったままです。
PHPでプログラミングしたことがある人は聞いたことがあると思います。
今回はLaravelでsessionを扱う方法についてエントリーします。
使い方
Laravelでセッションを操作するには、主に3つの方法があります。
違いは特にありません。ただ、HTTPリクエストから送られたデータをそのままセッション値へ保存するならRequestインスタンスを経由したやり方の方が便利です。
- Requestインスタンスを経由
- Sessionファサード
- sessionヘルパ
それでは用途ごとに説明していきます。
INDEX
セッションへ値を保存
// Requestインスタンスを経由
$request->session()->put('contact', $request->contact);
// Sessionファサードを使う場合
\Session::put('contact', 'hogehoge');
// sessionヘルパ
session(['contact' => 'hogehoge' ]);
セッションから指定の変数を読み込む
// Requestインスタンスを経由
$request->session()->get('contact');
// Sessionファサードを使う場合
\Session::get('contact', 'xxx'); // 取得できない場合 xxx を返す
// sessionヘルパを使う場合
session('contact');
セッション値の存在確認をする
// Requestインスタンスを経由
if ( $request->session()->has('count') ){ // ありの場合 }else{ // なしの場合 }
// Sessionファサードを使う場合
if ( \Session::has('count') ){ // ありの場合 }else{ // なしの場合 }
// sessionヘルパを使う場合
if ( session()->has('count'); ){ // ありの場合 }else{ // なしの場合 }
値がnull
であろうとも存在していることを確認したい場合はexists
メソッドを使います。
// Requestインスタンスを経由
if ( $request->session()->exists('count') ){ // ありの場合 }else{ // なしの場合 }
// Sessionファサードを使う場合
if ( \Session::has('exists') ){ // ありの場合 }else{ // なしの場合 }
// sessionヘルパを使う場合
if ( session()->has('exists'); ){ // ありの場合 }else{ // なしの場合 }
セッションから指定の変数を削除
// Requestインスタンスを経由
$request->session()->forget('contact');
// Sessionファサードを使う場合
\Session::forget('contact');
// sessionヘルパ を使う場合
session()->forget('contact');
セッションから全データを削除
// Requestインスタンスを経由
$request->session()->flush();
// Sessionファサードを使う場合
\Session::flush();
// sessionヘルパ を使う場合
session()->flush();
全てのセッションを読み込む
// Requestインスタンスを経由
$request->session()->all();
// Sessionファサードを使う場合
$session__all = \Session::all();
// sessionヘルパ を使う場合
session()->all();
フラッシュメッセージ
次のリクエスト間だけセッションにアイテムを保存したい場合はflashメソッドを使います。
// Requestインスタンスを経由
$request->session()->flash('flash_message', '登録完了!');
// Sessionファサードを使う場合
\Session::flash('flash_message', '登録完了!');
// sessionヘルパ を使う場合
session()->flash('flash_message','登録完了!');
// withヘルパを使っても可能
return redirect('/')->with('flash_message', '登録完了!');
フラッシュメッセージについては過去にエントリーしました。こちらもよければ
以上です。
PHPフレームワーク Laravel入門 第2版
僕がはじめてLaravelを学習するために参考にしたサイトは、掌田津耶乃(しょうだつやの)さんの libro というサイトです。当時(2016年)、Laravel学習サイトの中でもこのサイトは群を抜いてわかりやすく説明されていたので、とても勉強になったのを覚えています。この本は掌田津耶乃さんが書いた本なので、わかりやすく解説されているだろうと kindle で購入しました。2020年8月の時点でいうと日本国内にて唯一の Laravel の良書と言っても良いかと思います。口コミでもLaravel本のロングセラー定番解説書として認知されています。当サイトではチュートリアル形式でLaravelを解説しているので、初心者の方はこの本とセットで学習されるといいと思います。しかし、かなりわかりやすく解説されているとはいえ、PHP中級者以上のスキルは必要です。PHP自体の知識が乏しい方は 独習PHP 第3版 をあわせて購入することをお勧めします。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。