powered by nequal

rhaco1-doc :: 002-model/02-login-condition-model.txt

http://wikihub.org/wiki/rhaco1-doc/002-model/02-login-condition-model

Table of contents:

collapse all expand all

Updates:

ログイン条件モデル

モデルモデルと言いますが,何もテーブルだけがモデルではありません.

rhaco では,ログイン条件もモデル化することができます.

ログイン条件のモデル化によって,複雑なログイン条件でも実装することが可能となる一方,各 View においては非常に簡便に取り扱うことができます.

Dbと連携したログイン条件モデル

User テーブルにログインIDとハッシュ化されたパスワードが格納されている場合のログイン処理を考えます.

まず User モデルにログイン処理を実装します.ログイン処理は User モデルの loginCondition メソッドにて行います.

<?php
Rhaco::import("model.table.UserTable");
class User extends UserTable{
	/**
	 * ログイン処理
	 * @param DbUtil $db
	 * @param $object 
	 * @param Request $request
	 * @param boolean
	 */
	function loginCondition(&$db,&$object,$request){
		$object = $db->get($this,
			new C(
				Q::eq($this->columnLogin(),$request->getVariable("login")),
				Q::eq($this->columnPassword(),md5($request->getVarialbe("password")))
				)
			);
		return Variable::istype("User",$object);
	}
}

View でログイン条件を指定します.

<?php
Rhaco::import("generic.Views");
class HogeViews extends Views{
	/**
	 * ユーザマイページ
	 */
	function mypage(){
		$this->loginRequired(new RequestLoginConditionDb($db, new User()));
		//処理
	}
}

このようにしてログイン条件モデルを渡すことで実際のログイン処理を隠蔽してしまうことが可能となります.

ログイン情報の取得

User モデルに実装した loginCondition メソッドで第二引数にて参照渡ししたUser インスタンスは,ログイン情報としてセッションに格納されています.

ですので,この情報は, getLoginSession メソッドにて取得することが可能です.

<?php
Rhaco::import("generic.Views");
class HogeViews extends Views{
	/**
	 * ユーザマイページ
	 */
	function mypage(){
		$this->loginRequired(new RequestLoginConditionDb($db, new User()));
		//ログイン情報の取得
		$user = $this->getLoginSession();
		//処理
	}
}