sfWidgetFormSelectを利用した場合のFormFilterの設定

generate-adminで作成したフォームで値を選択させる場合は、sfWidgetFormSelectを利用する。

class HogeFormFilter extends BaseHogeFormFilter
{
  public function configure()
  {
    $this->setWidget(
      'enable',
      new sfWidgetFormSelect(
        array('choices' => array(
          '' => '',
          't' => 'enable',
          'f' => 'disable'
        ))
      )
    );
  }

ただし、このままだとフォームフィルタを利用した絞込みがうまくいかない。
この原因は、絞込みに利用されるCriteriaを生成する際にaddTextCriteriaメソッドが利用されるため。
このメソッドは、値が配列かつtextというキーが存在することが前提になっているが、sfWidgetFormSelectではそんなことをしてくれない。
このため、値がカラとみなされCriteriaに条件が指定されない。

対処としては、BaseHogeFormFilterでBooleanとすることで、値がそのまま利用される。

  public function getFields()
  {
    return array(
      'id'           => 'Number',
      'enable'       => 'Boolean',
      'comment'      => 'Text',
    );
  }