我是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(),
));
}
}
答案 0 :(得分:0)
这就是我使用自定义InputFilter的方法。我将setMessage应用到NullPointerException
,Zend-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;
}
}