■使用方法
以下のようにしてバリデートする。
$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;
}
}
}