如何将元素标签集成到ZF2中的验证错误消息中?

时间:2016-05-27 10:53:30

标签: zend-framework2 zend-form view-helpers zend-validate validationmessage

我有一个表单,其中错误消息必须在一个地方捆绑显示。默认消息是通用的,因此用户有时不知道哪个消息是针对哪个表单字段:

  

找到与输入匹配的记录

     

值是必需的,不能为空

     

输入不是有效的电子邮件地址......

我可以为每个字段编写自定义消息,但需要付出很多努力并进行复制和粘贴。

所以,我想显示如下消息:

  

我的元素Foo标签:找到了匹配输入的记录

     

我的元素条形码标签:值是必需的,不能为空

     

我的元素Buz标签:输入不是有效的电子邮件地址......

如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

ZF2似乎没有为此要求提供解决方案。我的解决方案/解决方法是覆盖Zend\Form\View\Helper\FormElementErrors替换FormElementErrors#render(...)的{​​{1}}

$this->prepareMessagesToPrint($messages, $messagesToPrint, $element, $escapeHtml);

并添加一个方法,根据需要处理$messages

protected function prepareMessagesToPrint($messages, &$messagesToPrint, $element, $escapeHtml) {
    foreach ($messages as $nameOrType => $elementOrError) {
        if (is_string($elementOrError)) {
            $elementLabel = $element->getLabel()
                ? '<b>' . $this->view->translate($element->getLabel()) . '</b>' . ': '
                : null
            ;
            $message = $escapeHtml($elementOrError);
            $messagesToPrint[] = $elementLabel ? $elementLabel . $message : $message;

        } elseif (is_array($elementOrError)) {
            $newElement = $element->get($nameOrType);
            $this->prepareMessagesToPrint(
                $elementOrError, $messagesToPrint, $newElement, $escapeHtml
            );
        }
    }
}