Zend framework2 Zend\Form\Form未显示在来自自定义验证程序的错误消息中

Zend framework2 Zend\Form\Form未显示在来自自定义验证程序的错误消息中,zend-framework2,zend-form,zend-validate,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 __

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

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_类时,我会得到验证器类名。当我var_dump$this->getTranslator()时,它输出null。我需要为此设置一个转换器吗?在哪里设置转换器最好,这样我自己的验证器就可以在系统范围内使用?

也许你忘了添加messageVariables

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

因为您为验证器类定义了一个
\uu构造
方法,所以父
\uu构造
不会被隐式调用: (见附注)

您应该修改您的
\u构造
方法:

public function __construct($dbAdapter)
{
    $this->dbAdapter = $dbAdapter;
    //parent::__construct($options);
    parent::__construct(null); // or (void)
}
如您所见,
$messageTemplates
$messageVariables
是从
抽象验证器::u construct
中“加载”的,用于某些方法中(包括
error
):


你能给我一些代码来说明你是如何使用它的吗?除了value参数,我不使用任何变量。根据文档,不需要指定messageVariables变量。但只是想尝试一下,我想提前加上它,但还是没有运气。就这么简单。有时候你只需要有人指出显而易见的事情。非常感谢。