HtmlTag装饰器上的Zend_Form_Element条件类(出错)

时间:2013-01-09 15:37:01

标签: zend-framework zend-form zend-form-element zend-decorators

在我使用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类。我使用以下验证器:

  • 视图助手
  • 错误
  • HtmlTag('tag' => 'small', 'placement' => 'append'
  • HtmlTag('tag' => 'div'
  • 标签
  • HtmlTag('tag' => 'li'

默认验证器已禁用。 (我在扩展Zend_Form的自定义表单类的$element->setDecorators()方法中使用init()。所以我的问题归结为在上面有任何验证错误时将类“错误”添加到最后一个装饰器元件。

有人知道这样做的方便吗?我想我可以覆盖元素的默认渲染方法,以检查是否存在任何验证错误,然后将类选项添加到命名装饰器,但这不是很优雅。我想知道是否有一些标准化的方法来做到这一点......顺便说一下,我正在使用Zend Framework 1.11。

干杯, 埃里克

铊; DR:

如果验证错误,如何在Zend_Form_Element上为HtmlTag装饰器添加类选项?

1 个答案:

答案 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')

如果要对所有元素使用错误类,最好自定义装饰器。