1

Zend Framework で構築している Web プロジェクトの 1 つに、次の構造のフォームがあります。

<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 の標準デコレータを使用して、この構造を構築できますが、1 つだけ例外があります。error検証エラーなどがある要素の li にクラスを追加できるようにする必要があります。次のバリデータを使用します。

  • ビューヘルパー
  • エラー
  • HTMLタグ ( 'tag' => 'small', 'placement' => 'append')
  • HTMLタグ ( 'tag' => 'div')
  • ラベル
  • HTMLタグ ( 'tag' => 'li')

デフォルトのバリデータは無効になっています。(私は Zend_Form を拡張するカスタム フォーム クラス$element->setDecorators()のメソッドで使用しinit()ます。) したがって、要素に検証エラーがある場合、最後のデコレータにクラス "エラー" を追加するという問題が発生します。

これを行う便利な方法を知っている人はいますか?要素のデフォルトの render メソッドをオーバーライドして、検証エラーがあるかどうかを確認し、名前付きデコレータにクラス オプションを追加することもできると思いますが、それはあまりエレガントではありません。これを行うための標準化された方法があるかどうか疑問に思っています...ちなみに、Zend Framework 1.11を使用しています。

乾杯、エリック

概要:

検証エラーがある場合、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 に答える