Laravelでsessionを使うことがあったので、使い方をまとめて見ました。
Laravelのセッションはヘルパー、リクエスト、ファサードの3つから使えます。
3つとも同じように使えるので、ヘルパーのところだけ説明を記載しています。
リクエストとファサードも同様です。
セッションの仕組みに関しては、PHPのこちらの記事に書いたので、気になる方は確認してみてください。
PHPでSession(セッション)を使う方法や仕組みを解説!
PHPのSession(セッション)について、「そもそもSessionとは?」と「Sessionを使う方法」を書いています。実際にセッションを使用したサンプルコードを載せています。PHPのバージョンは7で試しています。PHPのセッションにつ...
ヘルパー(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();
}
}
おわりに
特に違いもなさそうなので、短めで書きやすそうなヘルパーを使っていきたいと思いました!
コメント