Zend FrameworkからLaravelに移行する話(7)
はじめに
お仕事で、Zend Frameworkのバージョンアップをしなければならなくなった・・と思ったら、Zend Frameworkはもうなくて、Laminas Projectに移って新たなフレームワークとして公開されている。 しかし、Laminas MVCでは必要な要件を満たさないことが分かってとん挫していた。
そこで、次の候補としてLaravelを挙げて、必要な要件を満たせるかどうかを一歩ずつ調査していく。
要件(7)
7つ目の要件は、「セッションデータを扱うインタフェースがあること」。
Zend Frameworkで言うところのZend_Session周り。
まぁ、なければ$_SESSIONを直に触るだけなんだけど、何かあるでしょうということで、その辺を調べていく。
導入
こちらでセットアップした環境を(コピーして)使っていく。
私は以下のようにコピーを作成。
cp -pr laravel-setup-6-join-queries laravel-setup-7-session-data cd laravel-setup-7-session-data
設定・実装
新たなコントローラを作成する。
php artisan make:controller '\App\Http\Controllers\SessionController'
このapp/Http/Controllers/SessionController.phpを以下のように編集する。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Session; class SessionController extends Controller { public function session() { Session::put('hoge.hogeString', 'hogehoge'); if (!Session::has('default.count')) { Session::put('default.count', 1); } else { Session::put('default.count', Session::get('default.count') + 1); } if (!Session::has('hoge.num')) { Session::put('hoge.num', 1); } else { Session::put('hoge.num', Session::get('hoge.num') + 2); } if (!Session::has('hoge.obj')) { Session::put('hoge.obj', json_decode(json_encode(['cnt' => 1]))); } else { $obj = Session::get('hoge.obj'); $obj->cnt++; Session::put('hoge.obj', $obj); } if (Session::has('default.hogeString')) { $hoge1 = 'Default hoge string is set: ' . Session::get('default.hogeString'); } else { $hoge1 = 'Default hoge string is NOT set'; } if (Session::has('hoge.hogeString')) { $hoge2 = 'HOGE hoge string is set: ' . Session::get('hoge.hogeString'); } else { $hoge2 = 'HOGE hoge string is NOT set'; } return view('session.session', [ 'count' => Session::get('default.count'), 'num' => Session::get('hoge.num'), 'obj' => Session::get('hoge.obj'), 'hoge1' => $hoge1, 'hoge2' => $hoge2, ]); } public function clear() { // Session::flush(); // 全データが削除されてしまう Session::forget('default.count'); Session::forget('hoge.hogeString'); Session::forget('hoge.num'); Session::forget('hoge.obj'); // あるいは、Session::all() ですべてのデータを取得して、 // キー名が正規表現にマッチするもののみSession::forget() する手も考えられる return redirect('/session/session'); } }
次に、ビューテンプレートresources/views/session/session.tplを作成する。
Count: {$count|escape:"html"}
<br>
Num: {$num|escape:"html"}
<br>
Obj: {$obj->cnt|escape:"html"}
<br>
Hoge1: {$hoge1|escape:"html"}
<br>
Hoge2: {$hoge2|escape:"html"}
最後に、routes/web.phpに以下の行を追記する。
Route::get('/session/session', [\App\Http\Controllers\SessionController::class, 'session']);
Route::get('/session/clear', [\App\Http\Controllers\SessionController::class, 'clear']);
動作確認
以下のURLにアクセスする。
http://<your-ip-address>/laravel-setup-7-session-data/public/session/session
最初のアクセスでは以下のような画面が表示されればOK。
Count: 1 Num: 1 Obj: 1 Hoge1: Default hoge string is NOT set Hoge2: HOGE hoge string is set: hogehoge
リロードするごとに、値が以下のように変わっていけばOK。
ount: 3 Num: 5 Obj: 3 Hoge1: Default hoge string is NOT set Hoge2: HOGE hoge string is set: hogehoge
そして、以下のURLにアクセスしたときに最初の画面に戻ればOK。
http://<your-ip-address>/laravel-setup-7-session-data/public/session/clear
まとめ
- Zend Frameworkのようなnamespaceはないが、セッションデータを扱うことはできる