symfonyのgenerate-adminで作ったページのカスタマイズ

一覧ページのカスタマイズに関してはググっても有益な情報にめぐり合えなかったのでメモ。

symfonyのgenerate-adminを使って管理ツールを作った。
データベースにはフラグを登録するけど一覧ページ・編集ページでは意味のある文字列を表示したかったので、以下のような設定で対応した。

一覧ページ

データベースでスマートフォンの種別を「1」「2」のような感じで管理している場合。そのまま表示されても運用担当者には意味がわからないので、「iPhone」「Android」のように表示する。

まず、generator.ymlの「renderer」と「renderer_arguments」へ、文字列変換を行うメソッドと、引数に指定するフィールドを設定する。

generator:
    config:
      fields:
        os: { label: Device, renderer: DeviceRenderer::getDeviceName, renderer_arguments: [os] }

次に、文字列変換を行うクラスを定義する。

class DeviceRenderer {
  public static function getDeviceName($os) {
    switch ($os) {
      case 'io':
        echo 'iPhone';
        break;
      case 'an':
        echo 'Android';
        break;
      default:
        echo 'Unknown';
        break;
    }
  }
}

これで、めでたく「1」という意味の解らない表示が「iPhone」になった。

編集ページ

同じく「1」とかテキスト入力をさせることを避けるため、リストボックスにしてみた。

こちらはフォームクラスのconfigure()をオーバーライドする。

public function configure()
{
  // 「enable」フィールドを選択式に変更
  $this->setWidget(
    'enable',
    new sfWidgetFormSelect(
      array('choices' => array(
        '1' => 'iPhone',
        '2' => 'Android')
      )
    )
  );
}

この二つで、一覧ページと編集ページの表示の変更が出来た。