powered by nequal

rhaco1-doc :: 002-model/01-additional-validation.txt

http://wikihub.org/wiki/rhaco1-doc/002-model/01-additional-validation

Table of contents:

collapse all expand all

Updates:

検証処理を追加する

rhaco では,よく利用される様々な制限・検証を project.xml に記述することが実現できます.

しかし,データベースと連携した検証など,単純には行かない場面が多々あります.

こういう処理はつい View に書いてしまいそうになりますが,決して書いてはいけません.

Model で実装するための方法が用意されています.

Model に verifyHoge というように,"verify" が頭につくメソッドがあれば,検証時に自動的に呼び出されます.

<?php
Rhaco::import("model.table.HogeTable");
class Hoge extends HogeTable{
	/**
	 * hoge を検証する
	 * @param DbUtil $db
	 * @return boolean
	 */
	function verifyHoge(&$db){
		return false;
	}
}
 
?>

メールアドレス確認のための再入力処理

これも,個人情報登録処理ではよくありますね!

こういう場合には,extra という仮想列を利用します.

<project>
	<database name="sample">
		  <table name="member">
		  	 <column name="id" type="serial"/>
			 <column name="name" type="string" require="true"/>
			 <column name="email" type="email" require="true"/>
			 <extra name="email_confirm" type="string"/>
		  </table>
	</database>
</project>

で,モデルに検証のための追加メソッドを宣言します.

<?php
Rhaco::import("model.table.MemberTable");
Rhaco::import("exception.ExceptionTrigger");
/**
 * 個人情報
 */
class Member extends MemberTable{
      /**
       * メールアドレスを確認する
       * @return boolean
       */
      function verifyEmail(){
          if($this->getEmail()!=$this->getEmailConfirm()){
              return ExceptionTrigger::raise(new GenericException("メールアドレスを確認してください"));
	      }
          return true;
      }
}
 
?>

これで,メールアドレスの正当性のチェックは全て email で行い,email_confirm では,email と同じかどうかだけをチェックするだけになります.

参考