在Zf2中,如何在验证时添加错误css类失败

时间:2014-06-12 11:32:51

标签: php css validation zend-framework2

当ZF2验证失败时,我想在输入文本框周围添加红色边框。我想如果ZF2提供了在验证失败的情况下添加/设置css类的方法。 如果只使用Zend Validation / Form API就可以了。我不是在考虑客户端(javascript / jQuery)解决方案。

更新:

我正在使用像

那样的Form Row元素
<div class="row">
    <div><?php echo $this->formLabel($form->get('first_name')); ?></div>
    <div><?php echo $this->formElement($form->get('first_name')); ?></div>
    <div><?php echo $this->formElementErrors($form->get('first_name'), array('class' => "field-validation-error")); ?></div>
</div>

2 个答案:

答案 0 :(得分:4)

您可以使用FormRow view helper,它将使用CSS类呈现无效元素(&#34;输入错误&#34;默认情况下)。

在您的模板中使用非常简单:

echo $this->formRow($element);

或者如果你想要自定义类:

echo $this->formRow()->setInputErrorClass('my-error-class')->render($element);

答案 1 :(得分:0)

如果您希望在输入中添加特定的“错误”类,则需要修改相关的Zend\Form\View\Helper\Form*类,因为这些类是内省Zend\Form\ElementInterface个对象并呈现所需的HTML。

例如:

// \MyModule\Form\View\Helper\MyCustomFormElement.php
class MyCustomFormElement extends \Zend\Form\View\Helper\FormElement
{

    public function render(Element $element)
    {
        $errors = $element->getMessages();

        if (! empty($errors)) {

            $classes = $element->getAttribute('class');

            if (null === $classes) $classes = array();
            if (! is_array($classes)) $classes = explode(' ', $classes);

            $classes = array_unique(array_merge($classes, array('my-error-class')));

            $element->setAttribute('class', implode(' ', $classes));
        }

        return parent::render($element);
    }

}

然后通过注册一个具有相同名称的invokable来替换默认的表单元素助手。

// Module.php
public function getViewHelperConfig()
{
    return array(
        'invokables' => array(
            'form_element' => 'MyModule\Form\View\Helper\MyCustomFormElement',
        ),
    );
}