2009-07-04
■[symfony] カスタムバリデータ(custom validator)の作り方
symfony1.2ではsfValidatorBaseを継承して作る。
検証対象はチェックボックスなどの複数選択で得られる値を仮定している。
つまりフォームに渡ってくる値は配列。
その配列の要素数がneed_number_countであるかどうかを検証する。
class numbersValidator extends sfValidatorBase {
//
// 初期設定
//
protected function configure($options = array(), $messages = array()) {
// 使用するオプションを追加
$this->addOption('need_number_count');
// 検証失敗時のエラーメッセージ設定
$this->addMessage('need_number_count', $options["need_number_count"].'個の数字を選択してください。%need_number_count%個、選択されています。');
parent::configure($options, $messages);
}
//
// 検証処理
//
protected function doClean($value) {
// 今回は$valueは配列。(テキスト入力など通常は文字列)
// 配列の要素数を得る。
$countNumber = count($value);
// オプションで指定された値と要素数が一致するか検証
if ($this->hasOption('need_number_count') && $this->getOption('need_number_count') != $countNumber) {
// 検証失敗したら例外を投げる
// 第2引数にオプション名。
// 第3引数にエラーメッセージで%need_number_count%を置換する値。
// ここではオプションで指定された値。
throw new sfValidatorError($this, 'need_number_count', array('need_number_count' => $this->getOption('need_number_count'), 'need_number_count' => $countNumber));
}
return $value;
}
}