在Zend_Form中添加多个验证器

C4P*_*4PO 1 validation zend-framework

我想为登录脚本创建一个表单字段,允许输入用户名或电子邮件地址.

我有一个验证器

$loginName = new Zend_Form_Element_Text('loginName');
$loginName->addValidators(array('Alnum', 'EmailAddress');
Run Code Online (Sandbox Code Playgroud)

哪个不起作用(因为它似乎验证了Alnum和EmailAddress).我想验证Alnum OR EmailAddress.

有关如何做到这一点的任何建议?

A.J*_*own 5

你有两个选择.您可以使用正则表达式验证程序,也可以编写自定义验证程序,该验证程序本身使用Alnum和电子邮件验证程序.

http://framework.zend.com/manual/en/zend.validate.writing_validators.html

第二个选项看起来像这样:

    class My_Validate_Field extends Zend_Validate_Abstract
    {
     
        protected $_messageTemplates = array(
            'alnumemail' => "'%value%' is not an alphanumeric string or email address"
        );
     
        public function isValid($value)
        {
              $alnum = new \Zend_Validate_Alnum();
              $email = new \Zend_Validate_EmailAddress();

        $valid = $alnum->isValid( $value ) || $email->isValid( $value);

        if( !$valid ) {
            $this->_error();
        }

            return $valid;
        }
    }
Run Code Online (Sandbox Code Playgroud)