Symfony1.4で、カスタムバリデータを作成する方法を調べて、実践したのでメモ。
まず、カスタムバリデータを作る前に、自分が使いたいバリデータが既存のものにないか確認します。
・symfony Forms in Action | 付録 B - バリデータ | symfony | Web PHP Framework
使いたいバリデータがない場合は、自分で作ります。
カスタムバリデータを作るときに参考になった記事は、Symfony1.4だと以下の通りです。
・The More with symfony book | カスタムウィジェットとバリデータ | symfony | Web PHP Framework
・symfonyでカスタムバリデータを使ってフィルタを実装する - spanstyle::monolog
・symfonyのValidatorで全角/半角変換などを行う - ゆっくり*ゆっくり
実際に、書籍を特定するための番号であるISBNを入力値の長さと文字の構成を確認するバリデータを作ってみました。
ちなみに、ISBNは、ISBN-10だと10桁で、1桁目が 0 ~ 9 、X が使用され、他の桁は数字です。ISBN-13は13桁で、数字のみで構成されています。
・参考:ISBN - Wikipedia
正規表現の使い方はこちらを参考にしました。
・正規表現
そして、実際に作ったのが下記のソースになります。
■ myValidatorIsbn.class.php
(ISBNの形式に合ってるか確認するバリデータ)
$value));
}
}
// 入力値の長さが13文字の場合、そのまま入力値を返す
if (strlen($value) == 13){
// ISBN-13は数字のみで構成される
if (preg_match("/^[0-9]{13}?$/" ,$value))
{
return $value;
} else {
throw new sfValidatorError($this, 'ISBN-13は数字のみで入力して下さい', array('value' => $value));
}
}
// それ以外の場合、エラー
throw new sfValidatorError($this, 'ISBNは10文字、または13文字で入力して下さい', array('value' => $value));
}
}
■ IsbnSearchForm.class.php
(ISBNの入力フォームを定義しているフォームファイル)
setWidgets(array(
'isbn' => new sfWidgetFormInput(array(), array('size' => 20, 'maxlength' => 13, )),
));
$this->setValidators(array(
'isbn' => new myValidatorIsbn(array('required' => true, ),
array('required' => '未入力', )),
));
$this->widgetSchema->setNameFormat('isbn_search[%s]');
$this->widgetSchema->setLabels(array('isbn' => 'ISBN10/13', ));
}
}
以上です。