如何在Zend Framework 2中向表单添加错误消息?

时间:2016-08-24 11:07:06

标签: php validation zend-framework2 zend-form validationerror

我有一个包含多个嵌套Zend\Form的复杂Fieldset。现在我需要实现交叉 - Fieldset - 验证。这意味着,验证规则引用来自不同Element的多个Fieldset。我发现这样做的唯一方法是在MyForm#isValid()中实施此验证,因为它是单一的地方,我可以从中查看每个Fieldset

MyForm extends Form
{
    public function isValid()
    {
        $isFormValid = parent::isValid();
        $isCrossFieldsetVaidationOk = // my additional validation logic
        return $isFormValid && $isCrossFieldsetVaidationOk;
    }
}

尚未测试,但它会起作用。问题在于添加错误消息。

我试过

$this->setMessages(array_merge(
    $this->getMessages(), ['my new message'])
);

但它不起作用。

如何添加Form错误消息?

2 个答案:

答案 0 :(得分:4)

需要为表单元素加入消息。

$form->get('password')->setMessages(['Wrong password']);

答案 1 :(得分:2)

错误消息链接到表单的元素,而不是直接链接到表单。因此,当 newage 说,你必须为特定元素设置消息(所以他的答案是有效的,我赞成它:-))。

但是当你扩展Form时,你可以直接在表单中设置你自己的错误消息方法:

MyForm extends Form
{

    protected $errorMessages = [];

    public function isValid()
    {
        $isFormValid = parent::isValid();
        $isCrossFieldsetValidationOk = // your additional validation logic

        if (!$isCrossFieldsetValidationOk) {
            $this->addErrorMessage('Oh oh... Cross-fieldset validation error...');
        }
        return $isFormValid && $isCrossFieldsetValidationOk;
    }

    public function addErrorMessage($text)
    {
        $this->errorMessages[] = $text ;
        return $this; // For a fluent setter
    }

    public function getErrorMessages()
    {
        return $this->errorMessages ;
    }

    public function getMessages($elementName = null)
    {
        if ($elementName) {
            $messages = parent::getMessages($elementName);
        } else {
            $messages = array_merge($this->getErrorMessages(), parent::getMessages($elementName));
        }
        return $messages;
    }

}