PHPのRuby on Railsクローンのフレームワーク Akelos PHPをいじってみた出来事のメモ。

Akelosをいじってみるメモ帳

Akelos PHP Blogチュートリアル一覧(全18記事)
Akelos PHP ユーザ認証チュートリアル一覧(全19記事)

2008年09月02日

Akelosユーザ認証チュートリアル 13.ApplicationControllerの実装 共通処理

ユーザ認証に関する実際の処理は、色々なコントローラから呼び出される可能性があります。
そこで、どのコントローラから呼び出されても良いように共通のコントローラである「ApplicationController」に実装します。
こうすることで、個別のコントローラは必要な時に必要な処理だけを書けば良いという寸法です。
この便利さは、半端ないのですが、実際には最後のほうで分かると思います。

下記のファイルを開いてください。共通というだけあって、今までのディレクトリより一つ上の階層にありますんで注意。
C:\xampp\htdocs\projects\blog\app\application_controller.php

まず、AccountコントローラのbeforeActionで呼び出す相手となっていた_authpageメソッドを実装しましょう。
以下のコードを加えます。

//各コントローラのbeforeAction登録で呼び出される関数
function _authpage()
{
//セッション情報に有効なデータが入っていれば認証済み
if(!empty($_SESSION['user'])) return true;

//以下ログインしていない場合の処理
$this->flash['notice'] = $this->t('This page needs login.');
//リクエストオブジェクトにあるURIを保存
$_SESSION['return_page'] = $this->Request->env['REQUEST_URI'];
//Userコントローラのログインアクションに移動
$this->redirectTo(array('controller'=>'account','action' => 'login'));
//beforeFilterの処理を進めさせない為、falseを返す
return false;
}

ここでは認証済みかどうかをセッション変数が空かどうかで判断しています。
ログインしていない場合は、今リクエストされた内容をセッションに保存し、Accountコントローラのログインアクションに遷移させています。アプリケーションコントローラは、どのコントローラから呼ばれたか分かりません。よって、redirectToメソッドでは、コントローラも指定していることに注意です。

また、beforeFilterで呼ばれた場合のルールですが、returnでtrue/falseを返す必要があります。
true = そのまま処理を続ける
false = 処理を中断する
これをしないといけません。要注意です。


続いて、同じくAccountコントローラで書かれていたredirectToStoredPageメソッドを足します。
このメソッドは、ログイン完了後、保存してあったアドレスに戻る処理でしたね。
実際、Accountコントローラに記述しても良いのですが、前述の_authpageメソッドで保存先を書いている関係上、同じ並びに書くのが筋です。以下のコードを加えて下さい。

//ログイン後、保存してあったページに戻る関数
function redirectToStoredPage()
{
//念のためログイン済みか確認
if(empty($_SESSION['user'])){
$this->redirectTo(array('controller'=>'account','action' => 'login'));
}else{
if(!empty($_SESSION['return_page'])){
//戻るページの情報を書き戻す
$return_page = $_SESSION['return_page'];
$_SESSION['return_page'] = false;
//保存してあるURIを与えてrecirectToする
$this->redirectTo($return_page);
}else{
//戻るページの指定が無く、単にログインしただけなのでユーザインデックスに戻る
$this->redirectTo(array('controller'=>'account','action'=>'index'));
}
}
}

内容はいたってシンプルです。
細かい処理の流れはコードを見ていただくとして、注目するべきは$this->redirectTo($return_page);でしょうか。redirectToメソッドは結構賢くて、通常は、ここまで出たように配列で飛び先を指定しますが、今回のようにURIアドレスを与えるだけでも解析して飛んでくれます。

最後に、以下のコードを加えます。

//現在のログインユーザの情報(オブジェクト)を返す関数
function currentUser()
{
//View(helper)においてログイン済みかどうかの判断などに使う
return unserialize($_SESSION['user']);
}

コメントにも書いてあるようにこれは、View用の処理です。詳しくはそのうちViewのところの追加説明で使いますので、今はこんなもんってことで。
posted by AMUAMU at 22:00| Comment(0) | TrackBack(0) | チュートリアル | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。