我创建了一个自定义验证器:
class MyValidator extends AbstractValidator
{
const ERROR_CONST = 'error';
protected $dbAdapter;
protected $messageTemplates = array(
self::ERROR_CONST => "Error msg for '%value%'."
);
public function __construct($dbAdapter)
{
$this->dbAdapter = $dbAdapter;
}
public function isValid($value, $context = null)
{
$this->setValue($value);
/**
* Do validation against db
*/
if(/* Not valid */){
$this->error(self::ERROR_CONST);
return false;
}
return true;
}
}
验证工作,我已经能够测试它了。什么不起作用是使用
输出错误消息echo $this->formElementErrors($form->get('action'));
所有输出的都是空的UL。这是翻译问题吗?当我在验证器中对$ this-> getTranslator()执行get_class时,我得到验证器类名。当我var_dump $ this-> getTranslator()时,它输出null。我是否需要设置一个翻译器来实现这一点,哪里是设置该翻译器的最佳位置,以便它对我自己的验证器来说是系统范围的?
答案 0 :(得分:2)
因为您为验证程序类定义了__construct
方法,所以不会隐式调用父__construct
:
http://php.net/manual/en/language.oop5.decon.php(见注)
您应该修改__construct
方法:
public function __construct($dbAdapter)
{
$this->dbAdapter = $dbAdapter;
//parent::__construct($options);
parent::__construct(null); // or (void)
}
如您所见,$messageTemplates
和$messageVariables
已从AbstractValidator::__construct
“加载”,以便在某些方法中使用(包括error
):
答案 1 :(得分:0)
也许您忘了添加 messageVariables ?
/**
* Message variables
* @var array
*/
protected $messageVariables = array(
'value' => 'value',
);