2007年6月22日(金曜日)

XOOPS Cube で自作 validator を使う

カテゴリー: - Ryuji @ 13時29分40秒

最近メインのパソコンが不調でまいってる龍司です。

しばらく、備忘録をかねてcubsonネタつづくかもしれません(^^;

さて、cubson が生成する編集用コードでは ActionForm が使われていることを 前回 書きました。

XCube_ActionForm では、基本的な妥当性検査(文字列長のチェックや必須チェックなど)の指定は prepare メソッド内で行います。

たとえば、username が 100 文字以内かどうか検査するための指定は次のようになります。


function prepare()
{
    $this->mFormProperties['username'] =& new XCube_StringProperty('username');

$this->mFieldProperties['username'] =& new XCube_FieldProperty($this); $this->mFieldProperties['username']->setDependsByArray(array('maxlength')); $this->mFieldProperties['username']->addMessage('maxlength', _MD_VIDEO_ERROR_MAXLENGTH, _MD_VIDEO_LANG_EDE_SUB_EVENT_NAME, '250'); $this->mFieldProperties['username']->addVar('maxlength', '100'); }

最初の new XCube_StringProperty(’username’) で username は 文字列であることを指定。

setDependsByArray() で利用する validator を配列で指定します。ここでは、maxlength を指定しています。
addMessage(validator 名 , エラーメッセージ)で validator ごとにエラーメッセージをセットします。
addVar()は、validator ごとにセットする値がことなりますが、最大値や最小値などをセットします。

ここで利用できる validator は、core/XCube_Validator.class.php で定義されています。
このファイルを参考にして自前の validator を作成して利用することもできます。

ただし、自前 validator を setDependsByArray でセットできるようにするには、次のようなクラス名にする必要があります。
# validator 取得部分には残念ながら delegate が入っていないので。。


// validator 名は 1 文字目だけ大文字
class XCube_{validator 名 }Validator extends XCube_Validator

たとえば次のように作成してください


class XCube_Ymd_dateValidator extends XCube_Validator
{
	function isValid(&$form, $vars)
	{
		if ($form->isNull()) {
			return true;
		}
		else {
			$date_string = $form->toString();
			$length = strlen($date_string);
			if($length != 8 ){
				return false;
			}
			if(!is_numeric($date_string)){
				return false;
			}
			$year = substr($date_string, 0, 4);
			$month = substr($date_string, 4, 2);
			$day = substr($date_string, 6, 2);

return checkdate($month, $day, $year); } } }

これは、YYYYMMDD 形式で日付が正しく入力されているかチェックするための validator の例です。
ActionForm が呼び出されるまでに読み込めていれば OK ですので、preload や利用するモジュールの Module.class.php あたりで インクルードしておくと良いとおもいます。

利用するときは ActionForm の prepare 内で下記のように指定します。


    $this->mFieldProperties['start_date']->setDependsByArray(array('ymd_date'));

RSS feed for comments on this post.

ƤˤϡޤȤդƤޤ

Ȥ

ʤߥȤդ뤳ȤϽޤ

10 queries. 0.027 sec.
Powered by WordPress Module based on WordPress ME & WordPress

〒104-0061 東京都中央区銀座1丁目3番3号 G1ビル7階
お問い合わせ TEL 03-3524-8860

Copyright(c) 2012 RYUS.All Rights Reserved.