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); ?>
遅い…
xdebugで確認したところ、select要素のaddMultiOption、getMulitOption内にある_translateValueが頻繁に呼び出されてて、ここがネックになってるっぽい。