LaravelでSession(セッション)の使い方まとめ

Laravel Laravel

Laravelでsessionを使うことがあったので、使い方をまとめて見ました。

Laravelのセッションはヘルパー、リクエスト、ファサードの3つから使えます。

3つとも同じように使えるので、ヘルパーのところだけ説明を記載しています。
リクエストとファサードも同様です。

ヘルパー(helper)でsessionを使う

値を保存する

連想配列で値を保存します。キー名で取り出せます。

session(['nameB' => 'testB']);

配列に値を保存する

pushで配列に追加されます。第1引数が取り出す時のキーになります。

session()->push('name2Array', 'abc');

値を取得する

キーを指定して取り出します。

echo session('nameB');

指定したキーの値が存在しない場合にはnullが返ってきます。

値を削除する

キーを指定して削除します。

session()->forget('nameB');

フラッシュデータを保存する

フラッシュデータは保存すると、1回だけアクセスできるデータです。
アクセス後は消えているようでした。

第1引数にキーを指定して、第2引数の値を保存します。

session()->flash('flashB', 'grape');

全データ削除

flushでsessionに保存されている全データが削除されます。

session()->flush();

存在チェック

hasメソッドにキー名を渡すとあるかどうかチェックできます。

if (session()->has('nameA')) {
    echo 'has A true.';
}

リクエスト(request)からsessionを使う

値を保存する

$request->session()->put('nameA', 'testA');

配列に値を保存する

$request->session()->push('name1Array', '123');

値を取得する

echo $request->session()->get('nameA');

値を削除する

$request->session()->remove('nameA');

フラッシュデータを保存する

$request->session()->flash('flashA', 'apple');

全データ削除

$request->session()->flush();

存在チェック

if ($request->session()->has('nameA')) {
    echo 'has A true.';
}

ファサード(facades)でsessionを使う

値を保存する

Session::put('nameC', 'testC');

配列に値を保存する

Session::push('name3Array', 'def');

値を取得する

echo Session::get('nameC');

値を削除する

Session::remove('nameC');

フラッシュデータを保存する

Session::flash('flashC', 'orange')

全データ削除

Session::flush();

存在チェック

if (Session::has('nameA')) {
    echo 'has C true.';
}

session ヘルパー(helper), リクエスト(request), ファサード(facade)の違いについて

特に違いはないようで、個人の好みのスタイルで書いていいようです。

サンプルコード

テストで使ったコードが下記です。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;

class SessionTestController extends Controller
{
    public function put(Request $request)
    {
        $request->session()->put('nameA', 'testA');
        session(['nameB' => 'testB']);
        Session::put('nameC', 'testC');
    }

    public function push(Request $request)
    {
        $request->session()->push('name1Array', '123');
        session()->push('name2Array', 'abc');
        Session::push('name3Array', 'def');
    }

    public function get(Request $request)
    {
        // 保存データ表示
        echo $request->session()->get('nameA') . '<br>';
        echo session('nameB') . '<br>';
        echo Session::get('nameC') . '<br>';

        // 存在チェック
        if ($request->session()->has('nameA')) {
            echo 'has A true.';
        }
        if (session()->has('nameA')) {
            echo 'has B true.';
        }
        if (Session::has('nameA')) {
            echo 'has C true.';
        }

        // 配列の値表示
        var_dump($request->session()->get('name1Array'));
        var_dump(session()->get('name2Array'));
        var_dump(Session::get('name3Array'));

        // flashデータ表示
        echo $request->session()->get('flashA') . '<br>';
        echo session('flashB') . '<br>';
        echo Session::get('flashC') . '<br>';
    }

    public function show(Request $request)
    {
        $request->session()->remove('nameA');
        session()->forget('nameB');
        Session::remove('nameC');
    }

    public function flash(Request $request)
    {
        $request->session()->flash('flashA', 'apple');
        session()->flash('flashB', 'grape');
        Session::flash('flashC', 'orange');
    }

    public function flush(Request $request)
    {
        $request->session()->flush();
        session()->flush();
        Session::flush();
    }
}

おわりに

特に違いもなさそうなので、短めで書きやすそうなヘルパーを使っていきたいと思いました!

コメント

タイトルとURLをコピーしました