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
基本上你可以这样做:
$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)
不知道这是否是最有效的方式,如果不这么认为,请删掉一行.