@blog.justoneplanet.info

日々勉強

Zend_Validateをつかってみる

■使用方法

以下のようにしてバリデートする。

$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;
        }
    }
}

コメントはまだありません»

No comments yet.

RSS feed for comments on this post.TrackBack URL

Leave a comment