Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 无法设置电子邮件验证Zend表单的错误消息_Php_Zend Framework_Zend Form - Fatal编程技术网

Php 无法设置电子邮件验证Zend表单的错误消息

Php 无法设置电子邮件验证Zend表单的错误消息,php,zend-framework,zend-form,Php,Zend Framework,Zend Form,这很奇怪。我正在尝试为Zend表单中的电子邮件验证元素设置错误消息。其他字段工作正常,但未发送电子邮件。发生了什么事 代码位: $name = new Zend_Form_Element_Text('name'); $name ->setLabel('Name:') ->setRequired(true) ->addValidator('Alnum') ->

这很奇怪。我正在尝试为Zend表单中的电子邮件验证元素设置错误消息。其他字段工作正常,但未发送电子邮件。发生了什么事

代码位:

$name = new Zend_Form_Element_Text('name');
        $name   ->setLabel('Name:')
                ->setRequired(true)
                ->addValidator('Alnum')
                ->addValidator('NotEmpty');
        $name    ->getValidator('NotEmpty')->setMessage('Please enter your name.');
        $name    ->getValidator('Alnum')->setMessage('Name can only contain letters and spaces.');

$email = new Zend_Form_Element_Text('email');
       $email   ->setLabel('Email:')
             ->setRequired(true)
                ->addFilter('StringToLower')
                ->addValidator('NotEmpty')
                ->addValidator('EmailAddress');

        $email  ->getValidator('NotEmpty')->setMessage('Please enter your email address.');
        $email  ->getValidator('EmailAddress')->setMessage('Email is not in proper format.');
名字起作用,但电子邮件不起作用


我仍然收到错误消息:
''没有基本本地格式的有效电子邮件地址-part@hostname

您需要指定消息类型:

$email->getValidator('emailAddress')->setMessage("'%value%' is not valid, use something like local-part@hostname",Zend_Validate_EmailAddress::INVALID_FORMAT);
以此为例:

protected $_messageTemplates = array(
        self::INVALID            => "Invalid type given, value should be a string",
        self::INVALID_FORMAT     => "'%value%' is no valid email address in the basic format local-part@hostname",
        self::INVALID_HOSTNAME   => "'%hostname%' is no valid hostname for email address '%value%'",
        self::INVALID_MX_RECORD  => "'%hostname%' does not appear to have a valid MX record for the email address '%value%'",
        self::INVALID_SEGMENT    => "'%hostname%' is not in a routable network segment. The email address '%value%' should not be resolved from public network.",
        self::DOT_ATOM           => "'%localPart%' can not be matched against dot-atom format",
        self::QUOTED_STRING      => "'%localPart%' can not be matched against quoted-string format",
        self::INVALID_LOCAL_PART => "'%localPart%' is no valid local part for email address '%value%'",
        self::LENGTH_EXCEEDED    => "'%value%' exceeds the allowed length",
    );

您需要指定消息类型:

$email->getValidator('emailAddress')->setMessage("'%value%' is not valid, use something like local-part@hostname",Zend_Validate_EmailAddress::INVALID_FORMAT);
以此为例:

protected $_messageTemplates = array(
        self::INVALID            => "Invalid type given, value should be a string",
        self::INVALID_FORMAT     => "'%value%' is no valid email address in the basic format local-part@hostname",
        self::INVALID_HOSTNAME   => "'%hostname%' is no valid hostname for email address '%value%'",
        self::INVALID_MX_RECORD  => "'%hostname%' does not appear to have a valid MX record for the email address '%value%'",
        self::INVALID_SEGMENT    => "'%hostname%' is not in a routable network segment. The email address '%value%' should not be resolved from public network.",
        self::DOT_ATOM           => "'%localPart%' can not be matched against dot-atom format",
        self::QUOTED_STRING      => "'%localPart%' can not be matched against quoted-string format",
        self::INVALID_LOCAL_PART => "'%localPart%' is no valid local part for email address '%value%'",
        self::LENGTH_EXCEEDED    => "'%value%' exceeds the allowed length",
    );

您需要创建自定义错误类。就我而言:

我已经在library/Zend/Validate文件夹中创建了自定义电子邮件验证类

class Zend_Validate_Email extends Zend_Validate_Abstract
{

    const INVALID = 'Email is required';
    protected $_messageTemplates = array(
    self::INVALID => "Invalid Email Address",
   );

     public function isValid($value)
     {
         if(filter_var($value, FILTER_VALIDATE_EMAIL) === false) {
            $this->_error(self::INVALID);
            return false;
        } else {
            // We only check the presence of a dot on the domain part
            $components = explode("@", $value);
            $domain = $components[1];

            if (strpos($domain, ".") === false) {
                $this->_error(self::INVALID);
                return false;
            }

            return true;
        }
     }
}
在我的表格中用作

$email_validate = new Zend_Validate_Email();

$neValidator = new Zend_Validate_NotEmpty();

$neValidator->setMessage('Please enter email.');

$emailaddress = new Zend_Form_Element_Text('EmailAddress');

$emailaddress->setRequired(true)

          ->setAttrib('size', '30')

          ->addFilter('StripTags')

          ->setAttrib('MaxLength',100)

          ->addValidator($neValidator,TRUE)

              ->addValidator($email_validate,TRUE)

          ->setAttrib('class','textbox')

          ->setDecorators($decorators);

希望它能帮助您创建自定义错误类。就我而言:

$email_validate = new Zend_Validate_Email();
$neValidator = new Zend_Validate_NotEmpty();
$neValidator->setMessage('Please enter email.');
$emailaddress = new Zend_Form_Element_Text('EmailAddress');
$emailaddress->setRequired(true)
我已经在library/Zend/Validate文件夹中创建了自定义电子邮件验证类

class Zend_Validate_Email extends Zend_Validate_Abstract
{

    const INVALID = 'Email is required';
    protected $_messageTemplates = array(
    self::INVALID => "Invalid Email Address",
   );

     public function isValid($value)
     {
         if(filter_var($value, FILTER_VALIDATE_EMAIL) === false) {
            $this->_error(self::INVALID);
            return false;
        } else {
            // We only check the presence of a dot on the domain part
            $components = explode("@", $value);
            $domain = $components[1];

            if (strpos($domain, ".") === false) {
                $this->_error(self::INVALID);
                return false;
            }

            return true;
        }
     }
}
在我的表格中用作

$email_validate = new Zend_Validate_Email();

$neValidator = new Zend_Validate_NotEmpty();

$neValidator->setMessage('Please enter email.');

$emailaddress = new Zend_Form_Element_Text('EmailAddress');

$emailaddress->setRequired(true)

          ->setAttrib('size', '30')

          ->addFilter('StripTags')

          ->setAttrib('MaxLength',100)

          ->addValidator($neValidator,TRUE)

              ->addValidator($email_validate,TRUE)

          ->setAttrib('class','textbox')

          ->setDecorators($decorators);

希望它能帮助您

有没有一种简单的方法来生成一条适用于所有这些错误的错误消息?IE:“你的电子邮件地址有问题。”谢谢!我认为您可以扩展emailAddress验证程序并更改受保护的变量$\u messageTemplates,这样您甚至不需要设置消息。有没有一种简单的方法可以生成一条适用于所有这些错误的错误消息?IE:“你的电子邮件地址有问题。”谢谢!我认为您可以扩展emailAddress验证程序并更改受保护的变量$\u messageTemplates,这样您甚至不需要设置消息。
$email_validate = new Zend_Validate_Email();
$neValidator = new Zend_Validate_NotEmpty();
$neValidator->setMessage('Please enter email.');
$emailaddress = new Zend_Form_Element_Text('EmailAddress');
$emailaddress->setRequired(true)