俺 Pedia

窓際エンジニア(仮)の日常

Slimフレームワークの利用(フック処理、Cookieの利用、Sessionの利用など)

この記事は「低予算でも闘う企画担当者の為の鎮魂歌 Advent Calendar 2015」の8日目の記事です。
 
今回も引き続きマイクロフレームワークであるSlimの説明を行います。
 
前回は最も基本的なルーティング、パラメータ、ビュー(レンダリング)について簡単に説明しました。
今回はフック処理、Cookieの利用、Sessionの利用について紹介します。

① フック処理

例えば認証が必要なアプリケーションを作成する場合、そのコンテンツの表示を行う前にあらかじめ認証状態を確認する必要があります。
そういった場合に利用するのがフック機能です。
 
フック機能ではあらかじめ設定されたフックポイントを利用する事で簡単に処理をフックする事が可能です。
 
例えば具体的なフック処理は次のようなものです。

このコードでは「/」「/mypage」「/login」の3つのパスに応じたルーティングが定義されています。
この内「/mypage」はログイン後のみ利用ができるコンテンツを想定しており事前に認証チェックを行っています。
 
具体的には、まず16行目で認証が必要なコンテンツであるかの確認を行っています。
この確認は12行目の「$arrayAllowPath」にあらかじめ登録したパスに一致しないパスの場合は認証状態の確認を行います。
そして17行目で認証状態を確認していますが、ここでは認証処理そのものは作っていませんので便宜上「$app->isAuthenticated」を認証状態に見た立て利用しています。
今回は認証状態に「false」を設定していますので、未認証状態と判定され18行目の「$app->redirect('/login')」により「/login」にリダイレクトされます。

さて、このフック機能で実装しますと今回のように特定の場合のみ適当するようなケースでは個別に適用または除外の処理を実装しなければなりません。
認証状態確認のような処理であれば問題ありませんが、事前確認が複数存在する場合それぞれにそれらの実装を行うのは非効率的かもしれません。
 
例えば先ほどのコードは次のようにも書くことができます。

このコードでは先ほどのコードとは違い「/mypage」にアクセスした場合のみ事前に実行する関数(isLogin関数)を24行目のルーティング設定で行っています。
このように特定の処理を特定のルーティングの振り分け時にのみ事前実行させることも可能です。
 
最初に紹介したフックポイントは紹介したものも含み「slim.before」「slim.before.router」「slim.before.dispatch」「slim.after.dispatch」「slim.after.router」「slim.after」があります。
ドキュメントは次のページにまとまっていますので参考にしてください。

Defaults - Slim Framework v2

② Cookieの利用

Cookieは認証をはじめ様々な機能されますがSlimでも当然利用可能です。
 
次のコードはアクセス数をCookieに保存し表示するものです。

この処理では10行目で対象のキーのCookieの存在を確認し存在していない場合は初期化(1をセット)し、存在している場合はカウントアップし表示しています。
 
このようにCookieも一般的なPHPと同じように利用する事が可能です。
その他設定可能なパラメータも以下のように通常のPHPと同じように利用する事が可能です。

$app->setCookie($name, $value, $expiresAt, $path, $domain, $secure, $httponly);

その他SlimフレームワークではCookieで取り扱うデータを暗号化する事も可能です。
暗号化する場合はあらかじめ設定が必要となります。

この例では「/set/」にアクセスした際にCookieにテキスト(myname)を保存し、「/get/」にアクセスした場合そのテキストを読み出し表示しています。
このデータが実際のクライアント環境でどのように保存されているかというと次のようになっています。

f:id:levelnine:20151207144619p:plain:w500

サーバ側で読み書きする場合は暗号化の事は意識する必要はありませんので簡易的なデータの取り回しの際は利用できるのではないでしょうか。

③ Sessionの利用

当然Cookie同様にSessionもそれほどフレームワークを意識せずに利用する事が可能です。
SlimフレームワークではSessionを利用する場合はPHP標準のSessionを利用する事も可能ですし、Slimフレームワークに統合されたSession機能を利用する事も可能です。
 
例えばSlimフレームワークのSessionを利用する場合は次のようなコードになります。

このコードはCookieのみで実装したコード(Example.3)をSessionを利用して書き直したものです。
実際の利用については一般的なPHPでの実装と変わりませんので特に躓く事なく利用する事ができるのではないでしょうか。

さて、今回も比較的利用頻度の多いSlimフレームワークの機能について紹介しました。 明日は設定やログなどに関する説明を行う最後のSlimフレームワークの説明となります。