XOOPS Cube で自作 validator を使う
最近メインのパソコンが不調でまいってる龍司です。
しばらく、備忘録をかねて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.
ƤˤϡޤȤդƤޤ
Ȥ
ʤߥȤդ뤳ȤϽޤ