sfFormの表示フォーマットを変更する

symfonyのformフレームワークはテンプレート中に

<table>
<?php echo $form ?>
</table>

とするだけで、定義したフォームのHTMLを吐き出して以下のような画面ができます*1

そして、入力にエラーがある場合は同じコードで以下のような画面ができあがります。

では、この表示フォーマットを変更したい場合はどうしたらよいのかというのが本日のミニtips。

ドキュメントには書かれていないのですが、ちゃんとメソッドが用意されています。
フォームクラスのsetupメソッド内で以下のようにsetRowFormatに新しい表示フォーマットを渡してあげればOKです。

<?php
...
  public function setup()
  {
    $format = "<tr>\n  <th>%label%</th>\n  <td>%field%%help%%error%%hidden_fields%</td>\n</tr>\n";
    $this->widgetSchema->getFormFormatter()->setRowFormat($format);
  }
...

$formatで指定している文字列が新しい表示フォーマットになります。見ればなんとなくわかると思いますが、%で囲まれた文字列(%label%, %help%, %error%, %hidden_fields%)が置換表示される各項目になります。

今回はエラーがヘルプの後ろに表示されるように変更しました。
そして変更後の表示は以下のようになりました。


標準でどのように指定されているかは$this->widgetSchema->getFormFormatter()->getRowFormat()の戻り値を見ればわかります。
この例では並びだけを変えましたが、helpの表示部分にスタイルのクラスを指定したりする場合などの利用も考えられます。

ソースを追わないと知らないままですが、ちょっと追えばちゃんと機能が用意されているところがsymfonyっぽい。

ref:symfony 1.x legacy website
ref:symfony 1.x legacy website

*1:デザインはスタイルシートで指定済みの結果です