Zend_Formをテーブルタグで

Zend_Formの要素、Zend_Dojo_Formの要素にかかわらず、指定したグループをテーブルで表示するためのディスプレーグループを作ってみた。

<?php
class Flower_Form_DisplayGroup_Table extends Flower_Form_DisplayGroup
{
    /**
     * Load the default decorators
     *
     * @return void
     */
    public function loadDefaultDecorators()
    {
        if ($this->loadDefaultDecoratorsIsDisabled()) {
            return;
        }

        $decorators = $this->getDecorators();
        if (empty($decorators)) {
            $this->addDecorator('FormElements')
                 ->addDecorator('HtmlTag', array('tag' => 'table'));
        }
        $this->affectElementDecorators(
            array(
                array('HtmlTag', array('tag' => 'td')),
                array('Label', array('tag' => 'th')),
                array('ViewScript', array(
                    'viewScript' => 'decorators/tr.php',
                    'placement' => '',
                    )),
            )
        );
    }

}

loadDefaultDecoratorsに間借りする形で、affectを入れているが、これは暫定実装。
コンストラクタを使用せずに追加されたエレメントにはtdラッパーがかからない。
が、実運用的には、フォームから追加済みのエレメントを投入するので、このフローが崩れることはほとんどないのだが、あとあと気持ち悪いので改修予定。
affectElementDecoratorsはZend_FormのsetElementDecoratorsのsetElementsをaddDecoratorsに変えたような感じの実装をしてある。
tr.phpはtrタグで囲むだけ