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')), )); ?>