ZF2 FormInput显示验证错误类失败

时间:2017-01-18 09:52:47

标签: zend-framework2 zend-form2

我的表单有多个元素以格式呈现:

<div class="form-group">
    <?php echo $this->formlabel($form->get('lastname')); ?>
    <?php echo $this->forminput($form->get('lastname')); ?>
    <?php echo $this->formElementErrors($form->get('lastname')); ?>
</div>

我这样做,所以我可以将我的元素放在我的标签旁边而不是内部:

<label for="lastname">Lastname</label><input .../>
<ul><li>error messages</li></ul>

我注意到,在验证失败时,输入未获得input-error类。当我将上面的代码更改为<?php echo $this->formrow($form->get('lastname')); ?>时,输入会被放入标签中(我不想要),输入会按预期获得错误类:

<label>Lastname<input ... class="input-error"/></label>

如何通过$this->forminput将输入错误类输入元素?

当我在formrow之前forminput时,两者中的输入都有错误类,但当我对它forminput执行时它不会。

[编辑]

短期我把formrow(没有回声)放在我现有的代码之上,现在我的输入字段显示错误类,但这感觉有点像黑客,我必须这样做对于我在我的应用中设置的每个元素都是这样的。

1 个答案:

答案 0 :(得分:1)

我创建了一个视图助手,将缺少的类添加到<?php /** * Extend zend form view helper forminput to add error class to element on validation * fail * * @package RPK * @author Richard Parnaby-King */ namespace RPK\Form\View\Helper; use Zend\Form\View\Helper\FormInput as ZendFormInput; class FormInput extends ZendFormInput { protected $inputErrorClass = 'input-error'; /** * Render a form <input> element from the provided $element * * @param ElementInterface $element * @throws Exception\DomainException * @return string */ public function render(\Zend\Form\ElementInterface $element) { $inputErrorClass = $this->inputErrorClass; // Following code block copied from \Zend\Form\View\Helper\FormRow // Does this element have errors ? if (count($element->getMessages()) > 0 && !empty($inputErrorClass)) { $classAttributes = ($element->hasAttribute('class') ? $element->getAttribute('class') . ' ' : ''); $classAttributes = $classAttributes . $inputErrorClass; $element->setAttribute('class', $classAttributes); } return parent::render($element); } }

Module.php

然后我告诉我的应用程序在我的public function onBootstrap(MvcEvent $e) { $services = $e->getApplication()->getServiceManager(); //add custom forminput viewhelper $services->get('ViewHelperManager')->setFactory('forminput', function (\Zend\View\HelperPluginManager $manager) { return new \RPK\Form\View\Helper\FormInput(); }); } 文件中使用此视图助手:

            if (!editImageButton.HasOnClickListeners)
            {
                editImageButton.Click += delegate
                {
                    ((MainActivity)context).ShowEditPhaseDialog(position);
                };
            }