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の実装だとか既にあったのですが、どう書く?みたいな感じで実装してみました。