在我使用Zend Framework构建的一个Web项目中,我有一个具有以下结构的表单:
<form>
<fieldset>
<h2>Header</h2>
<ul>
<li>
<label />
<div>
<input />
<small>Helptext</small>
</div>
</li>
<li class="error"> <!-- This one has errors -->
<label />
<div>
<input />
<ul class="errors">
<li>Error message</li>
</ul>
<small>Helptext</small>
</div>
</li>
</ul>
</fieldset>
</form>
我能够使用Zend Framework的标准装饰器来构建这个结构,除了一件事。我需要能够在具有验证错误等元素的li上添加error
类。我使用以下验证器:
'tag' => 'small', 'placement' => 'append'
)'tag' => 'div'
)'tag' => 'li'
)默认验证器已禁用。 (我在扩展Zend_Form的自定义表单类的$element->setDecorators()
方法中使用init()
。所以我的问题归结为在上面有任何验证错误时将类“错误”添加到最后一个装饰器元件。
有人知道这样做的方便吗?我想我可以覆盖元素的默认渲染方法,以检查是否存在任何验证错误,然后将类选项添加到命名装饰器,但这不是很优雅。我想知道是否有一些标准化的方法来做到这一点......顺便说一下,我正在使用Zend Framework 1.11。
干杯, 埃里克
铊; DR:
如果验证错误,如何在Zend_Form_Element上为HtmlTag装饰器添加类选项?
答案 0 :(得分:1)
当你只需要几个元素的错误类时,你可以简单地使用class属性的回调。这看起来如下所示:
$form->addElement('text', 'test', array(
'decorators' => array(
'ViewHelper',
array(
'HtmlTag',
array(
'tag' => 'li',
'class' => array(
'callback' => function($decorator) {
if($decorator->getElement()->hasErrors()) {
return 'error';
}
}
)
)
)
)
));
如果使用PHP5.2或更早版本,则需要使用基于数组的回调替换闭包(例如array($this, 'getLiClassAttribute')
)
如果要对所有元素使用错误类,最好自定义装饰器。