将类属性添加到表单错误

dev*_*erd 13 css php zend-form zend-framework2

我正在使用Zend Framework 2开发一个应用程序,并使用FormRow帮助器在表单中呈现标签,输入和错误(如果存在).

//within the view
echo $this->formRow($form->get('Name'));
Run Code Online (Sandbox Code Playgroud)

当用户提交表单而不填写所需的输入文本字段FormRow呈现它时出现以下错误消息:

<label>
    <span>Name: </span>
    <input class="input-error" type="text" value="" placeholder="Insert Name Here" name="Name">
</label>
<ul>
    <li>Value is required and can't be empty</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

如何设置li标签的类以便在之后设置样式?

我知道我可以使用所需的类属性来回显formElementErrors ..

<?php echo $this->formElementErrors($form->get("Name"), array('class' => "valuerequired", 'message' => "errortestmessage")); ?>
Run Code Online (Sandbox Code Playgroud)

..但FormRow仍然会在没有类的情况下呈现错误消息.

仅供参考我以这种方式设置实体:

public function getInputFilter()
    {
        if (!$this->inputFilter) {
            $inputFilter = new InputFilter();

            $factory = new InputFactory();

            $inputFilter->add($factory->createInput(array(
                'name'     => 'Name',
                'required' => true,
                'filters'  => array(
                    array('name' => 'StripTags'),
                    array('name' => 'StringTrim'),
                ),
                'validators' => array(
                    array(
                        'name'      => 'StringLength',
                        'options' => array(
                            'encoding' => 'UTF-8',
                            'min'      => 1,
                            'max'      => 100,
                        ),
                    ),
                ),
           )));

            $this->inputFilter = $inputFilter;
        }
        return $this->inputFilter;
    }
Run Code Online (Sandbox Code Playgroud)

Sam*_*Sam 23

请参阅formElementErrors的代码

基本上你可以这样做:

$this->formElementErrors($elem)
     ->setMessageOpenFormat('<ul%s><li class="some-class">')
     ->setMessageSeparatorString('</li><li class="some-class">');
Run Code Online (Sandbox Code Playgroud)

但那是非常不方便的......

更好的解决方案是通过您自己的类扩展Zend\Form\View\Helper\FormElementErrors,然后将view-helper formElementErrors注册到您的类.所以基本上你有这样的东西:

namespace Mymodule\Form\View\Helper;

use Zend\Form\View\Helper\FormElementErrors as OriginalFormElementErrors;

class FormElementErrors extends OriginalFormElementErrors  
{
    protected $messageCloseString     = '</li></ul>';
    protected $messageOpenFormat      = '<ul%s><li class="some-class">';
    protected $messageSeparatorString = '</li><li class="some-class">';
}
Run Code Online (Sandbox Code Playgroud)

最后一件事就是用这个新类注册视图助手.为此,您在Modules Module.php中提供以下代码

public function getViewHelperConfig()
{
    return array(
        'invokables' => array(
            'formelementerrors' => 'Mymodule\Form\View\Helper\FormElementErrors'
        ),
    );
}
Run Code Online (Sandbox Code Playgroud)

displaimer:这段代码没有经过测试,让我知道是否有一些错误,但我认为这应该很好.


dev*_*erd 11

好吧,解决我自己的问题就在我面前,而不是使用:

//within the view
echo $this->formRow($form->get('Name'));
Run Code Online (Sandbox Code Playgroud)

我单独调用了表单的每个元素:

    //within the view
    echo $this->formLabel($form->get('Name'));
    echo $this->formInput($form->get('Name'));
    echo $this->formElementErrors($form->get("Name"), array('class' => "some_class", 'message' => "errormessage")); 
Run Code Online (Sandbox Code Playgroud)

不知道这是否是最有效的方式,如果不这么认为,请删掉一行.