Zend_Formの履歴

PEAR::HTML_QuickFormっぽい。DecoratorとかView_Helperとかあってますます複雑に…。結局柔軟なデザインしようと思ったらテンプレートにべた書きするのが一番。

Element生成が設定ファイルからできるのは楽だなぁ。

Decoratorとは?

フォーム自身は[add|get|set|remove]Decoratorで、要素はsetElementDecoratorsで指定する。

デコレーターは登録した順に実行される。

ViewHelperは要素部分をZend_View_Helperを使って出力するデコレーター。例えばtextエレメントならば、HTMLのinput要素が出力される。

同じDecoratorは複数登録できない!?

テーブルレイアウトしようとして、次のようにしたけど動かない。

<?php
$element->setDecorators(array(
    'ViewHelper',
    'Description',
    'Errors',
    'HtmlTag', array('tag' => 'td'),
    'Label', array('tag' => 'td'),
    'HtmlTag', array('tag' => 'tr'),
));
?>


こうするとinput周りのtdが消去されてしまう。
どうやら同じデコレーターを複数登録すると、先に登録した方は消されてしまうようだ。

で、どうやら配列で囲むといいらしい。

http://devzone.zend.com/article/3450-decorators-with-zend_fo...

<?php
$element->setDecorators(array(
    'ViewHelper',
    'Errors',
    array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'element')),
    array('Label', array('tag' => 'td'),
    array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
));
?>

getValuesで値を取得したくない要素を設定する

setIgnoreする

<?php
$e = $form->createElement('hidden', 'hoge')
          ->setIgnore(true);
$form->addElement($e);
?>