akkun_choi pedia
mindia › akkun_choi pedia › 単語

Zend_Form

akkun_choi · 2008-10-22 更新 · 履歴(11)
第 3 版(2008-08-31 14:37:16 · akkun_choi)を表示しています。 最新版に戻る

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

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

Decoratorとは?

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

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

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

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

テーブルレイアウトしようとして、次のようにしたけど動かない。
>|php|
<?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_form
>|php|
<?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|
<?php
$e = $form->createElement('hidden', 'hoge')
->setIgnore(true);
$form->addElement($e);
?>
||<

遅い…

xdebugで確認したところ、select要素のaddMultiOption、getMulitOption内にある_translateValueが頻繁に呼び出されてて、ここがネックになってるっぽい。

履歴

タグ

「Zend_Form」タグが付けられた単語