1

在我使用 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 框架的标准装饰器来构建这个结构,除了一件事。我需要能够在error具有验证错误等的元素的 li 上添加类。我使用以下验证器:

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

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

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

干杯,埃里克

Tl;博士:

当出现验证错误时,如何在 Zend_Form_Element 上的 HtmlTag 装饰器中添加类选项?

4

1 回答 1

1

当您只需要几个元素的错误类时,您可以简单地使用类属性的回调。这将类似于以下内容:

$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')

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

于 2013-01-09T21:48:42.743 回答