Zend \ Form \ Form不显示自定义验证器的错误消息

时间:2013-09-25 08:09:14

标签: zend-framework2 zend-form zend-validate

我创建了一个自定义验证器:

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。我是否需要设置一个翻译器来实现这一点,哪里是设置该翻译器的最佳位置,以便它对我自己的验证器来说是系统范围的?

2 个答案:

答案 0 :(得分:2)

因为您为验证程序类定义了__construct方法,所以不会隐式调用父__constructhttp://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):

https://github.com/zendframework/zf2/blob/master/library/Zend/Validator/AbstractValidator.php#L73-L79

答案 1 :(得分:0)

也许您忘了添加 messageVariables

/**
 * Message variables
 * @var array
 */
protected $messageVariables = array(
    'value'  => 'value',
);