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

标签 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。我是否需要设置一个转换器才能使其工作?在哪里设置该转换器的最佳位置,以便它在我自己的验证器的系统范围内?

最佳答案

因为您为验证器类定义了 __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“加载”的,用于某些方法中(包括错误):

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

关于zend-framework2 - Zend\Form\Form 不显示来自自定义验证器的错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18999541/

相关文章:

zend-framework - 使用 Zend 框架在 Zend_Form 中加载模型

php - Zend 框架 : Require one out of three values

zend-framework - 将非 Zend_Form 变量传递给 ViewScript

php - Zend_Validate_Db_RecordExists 排除逻辑问题

php - 如何告诉 ZF2 的 JsonModel 返回 text/plain 而不是 application/json?

php - Zend Framework 2 - 注释表单和 Doctrine2 - 可捕获的 fatal error - ObjectManager

linux - ZF2 Routing 在 OS X 上工作但在 linux 上失败

php - Zend Validate - 如何从不同的子表单传递上下文值?

php - Zend 表单验证

php - Doctrine 2 在 MVC ZF2 环境中扮演什么角色?