簡體   English   中英

如何在Zend Framework 2中向表單添加錯誤消息?

[英]How to add an error message to the form in Zend Framework 2?

我有一個帶有多個嵌套Fieldset的復雜Zend\\Form 現在我需要實現跨Fieldset -validation。 這意味着,驗證規則引用了來自不同Fieldset的多個Element 我發現這樣做的唯一方法是在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錯誤消息?

需要加入消息以獲取表單元素。

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

錯誤消息鏈接到表單的元素,而不是直接鏈接到表單。 因此,正如newage所說,您必須為特定元素設置消息(因此他的回答有效,我贊成:-))。

但是,在擴展Form時,可以直接在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;
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM