Formで定義したWidgetを、全てHiddenとして出力する
確認画面で必要になったのですが、意外と簡単に実装できた。
Formクラスの中に下記のようなメソッドを追加して
<?php public function renderHiddenForConfirm() { $txt = ''; foreach ($this as $f) { $id = $f->getName(); if (self::getCSRFFieldName() != $id) { $w = new sfWidgetFormInputHidden(); $txt .= $w->render(sprintf($this->getWidgetSchema()->getNameFormat(), $id), $this->getValue($id)); } } return $txt; }
あとはテンプレート内で
<?php echo $form->renderHiddenForConfirm() ?>
と、するだけです。
ofFormConfirmPluginとかHTML_QuickFormのfreeze,unfreezeの実装だとか既にあったのですが、どう書く?みたいな感じで実装してみました。