■使用方法
以下のようにしてバリデートする。
$validator = Zend_Validate_EmailAddress(); if($validator->isValid($str)){ //success } else{//falure $this->view->error = $validator->getMessages();//array }
エラーメッセージの変更
以下のようにするとエラーメッセージを変更することができる。
$validator = new Zend_Validate_StringLength(8); $validator->setMessage( 'コラァ=3', Zend_Validate_StringLength::TOO_SHORT ); if($validator->isValid($str)){ //success } else{ $this->view->error = $validator->getMessages();//array }
以下のように数パターンエラーメッセージを指定することも考えられる。
$validator = new Zend_Validate_StringLength(array( 'min' => 2, 'max' => 10 )); $validator->setMessage( Zend_Validate_StringLength::TOO_SHORT => 'コラァ=3', Zend_Validate_StringLength::TOO_LONG => 'ゴルァ=3' ); if($validator->isValid($str)){ //success } else{ $this->view->error = $validator->getMessages();//array }
■静的に扱う
以下のようにZend_Validateクラスの静的メソッドを用いてバリデートすることもできる。
if(Zend_Validate::is($str, 'EmailAddress')){ //success }
if(Zend_Validate::is($str, 'StringLength', array('min' => 10, 'max' => 20))){ //success }
■多言語対応
デフォルトのメッセージはベタ&英語なのでパンチの利いたセリフが必要だ。
$validator = new Zend_Validate_EmailAddress(); $validator->setTranslator(new Zend_Translate( 'array', array( Zend_Validate_Hostname::UNKNOWN_TLD => 'そんなトップレベルドメインしらねーぜぃ' ), 'en' )); if($validator->isValid()){ //success } else{ //failure }
以下のようにして一度に適用できる。
Zend_Validate::setDefaultTranslator(new Zend_Translate( 'array', array( Zend_Validate_Hostname::UNKNOWN_TLD => 'そんなトップレベルドメインしらねーぜぃ' ), 'en' ));
バリデートのクラスはすごくいっぱい。
http://framework.zend.com/manual/ja/zend.validate.set.html
■バリデータチェーン
以下のようにして1つのインスタンスに複数のルールを付加できる。
$validator = new Zend_Validate(); $validator->addValidator(new Zend_Validate_Alnum()); $validator->addValidator(new Zend_Validate_StringLength(array( 'min' => 10, 'max' => 20 )));
■自作バリデータ
めんどくさいけど作ってみる。以下のようにZend_Validate_Abstractを継承して自作バリデータを作ることができる。
class MyValidate_Array extends Zend_Validate_Abstract { const ARRAY = 'array'; protected $_messageTemplates = array( self::ARRAY = "'%value'は配列を入れてね!" ); public function isValid($value) { if(!is_array($value)){ $this->_error(self::ARRAY); return false; } else{ return true; } } }