用于登录的FormElementError失败

时间:2016-08-18 08:46:51

标签: zend-framework2

我是Zend Framework 2的新手。当我尝试登录虚假凭据时,它不会显示任何错误。那么在这种情况下显示FormElementError的代码应该是什么呢。 我的LoginFilter.php如下:

use Zend\InputFilter\InputFilter;
class LoginFilter extends InputFilter
{
  public function __construct()
  {
 $this->add(array(
        'name'       => 'email',
        'required'   => true,
        'validators' => array(
            array(
                'name'    => 'EmailAddress',
                'options' => array(
                    'domain' => true,
                ),
            ),
        ),
    ));
  $this->add(array(
        'name'       => 'password',
        'required'   => true,  
        //'validators' => array(),
    ));
  }

}

1 个答案:

答案 0 :(得分:0)

这就是我使用自定义InputFilter的方法。我将setMessage应用到NullPointerExceptionZend-Validator,已填入ValidatorChain,通过setMessage().下面您可以看到$emailDoesNotExist->setMessage('This e-mail address is already in use');在这里我设置了错误消息。您也可以这样做以StringLength变量($stringLength)。

namespace User\InputFilter;

use Zend\Db\Adapter\Adapter;
use Zend\Filter\FilterChain;
use Zend\Filter\StringTrim;
use Zend\I18n\Validator\Alnum;
use Zend\InputFilter\Input;
use Zend\InputFilter\InputFilter;
use Zend\Validator\Db\NoRecordExists;
use Zend\Validator\EmailAddress;
use Zend\Validator\Identical;
use Zend\Validator\Regex;
use Zend\Validator\StringLength;
use Zend\Validator\ValidatorChain;

class AddUser extends InputFilter
{
/**
 *
 * @var InputFilter $dbAdapter
 */
protected $dbAdapter;

public function __construct(Adapter $dbAdapter)
{
    $this->dbAdapter = $dbAdapter;

    $firstName = new Input('first_name');
    $firstName->setRequired(true);
    $firstName->setValidatorChain($this->getNameValidatorChain());
    $firstName->setFilterChain($this->getStringTrimFilterChain());

    $lastName = new Input('last_name');
    $lastName->setRequired(true);
    $lastName->setValidatorChain($this->getNameValidatorChain());
    $lastName->setFilterChain($this->getStringTrimFilterChain());

    $email = new Input('email');
    $email->setRequired(true);
    $email->setValidatorChain($this->getEmailValidatorChain());
    $email->setFilterChain($this->getStringTrimFilterChain());

    $password = new Input('password');
    $password->setRequired(true);
    $password->setValidatorChain($this->getPasswordValidatorChain());
    $password->setFilterChain($this->getStringTrimFilterChain());

    $repeatPassword = new Input('repeat_password');
    $repeatPassword->setRequired(true);
    $repeatPassword->setValidatorChain($this->getRepeatPasswordValidatorChain());
    $repeatPassword->setFilterChain($this->getStringTrimFilterChain());

    $this->add($firstName);
    $this->add($lastName);
    $this->add($email);
    $this->add($password);
    $this->add($repeatPassword);
}


/**
 * Gets the validation chain for the first name and last name inputs
 *
 * @return ValidatorChain
 */
protected function getNameValidatorChain()
{
    $stringLength = new StringLength();
    $stringLength->setMin(2);
    $stringLength->setMax(50);

    $validatorChain = new ValidatorChain();
    $validatorChain->attach(new Alnum(true));
    $validatorChain->attach($stringLength);

    return $validatorChain;
}

/**
 * Gets the validation chain for the email input
 *
 * @return ValidatorChain
 */
protected function getEmailValidatorChain()
{
    $stringLength = new StringLength();
    $stringLength->setMin(2);
    $stringLength->setMax(50);

    $emailDoesNotExist = new NoRecordExists(
        array(
            'table' => 'user',
            'field' => 'email',
            'adapter' => $this->dbAdapter
        )
    );

    $emailDoesNotExist->setMessage('This e-mail address is already in use');

    $validatorChain = new ValidatorChain();
    $validatorChain->attach($stringLength, true);
    $validatorChain->attach(new EmailAddress(), true);
    $validatorChain->attach($emailDoesNotExist, true);

    return $validatorChain;
}

/**
 *
 * @return ValidatorChain
 */
protected function getPasswordValidatorChain()
{
    $stringLength = new StringLength();
    $stringLength->setMax(6);

    $oneNumber = new Regex('/\d/'); //checking to make sure it has at least one number
    $oneNumber->setMessage('Must contain at least one number');

    $validatorChain = new ValidatorChain();
    $validatorChain->attach($stringLength);
    $validatorChain->attach($oneNumber);

    return $validatorChain;
}

/**
 *
 * @return ValidatorChain
 */
protected function getRepeatPasswordValidatorChain()
{
    $identical = new Identical();
    $identical->setToken('password'); // Name of the input whose value to match
    $identical->setMessage('Passwords must match');

    $validatorChain = new ValidatorChain();
    $validatorChain->attach($identical);

    return $validatorChain;
}

/**
 *
 * @return \User\InputFilter\FilterChain
 */
protected function getStringTrimFilterChain()
{
    $filterChain = new FilterChain();
    $filterChain->attach(new StringTrim());

    return $filterChain;
}

}