10

年でフィルタリングするためのカスタム フォーム フィールド ドロップダウン リストを作成しました。私がやりたいことの 1 つは、ユーザーがすべての年でフィルタリングできるようにすることです。これはデフォルトのオプションです。として追加していempty_valueます。ただし、フォームをレンダリングすると、空の値ではない最初の項目がデフォルトになります。リストのすぐ上に、空の値があります。私の場合、ページが最初にロードされるときに「すべて」にページをデフォルトにするにはどうすればよいですか? コードは以下です。

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class YearType extends AbstractType
{

  private $yearChoices;

  public function __construct()
  {
      $thisYear = date('Y');
      $startYear = '2012';

      $this->yearChoices = range($thisYear, $startYear);
  }

  public function getDefaultOptions(array $options)
  {
    return array(
        'empty_value' => 'All',
        'choices' => $this->yearChoices,
    );
  }

  public function getParent(array $options)
  {
    return 'choice';
  }

  public function getName()
  {
    return 'year';
  }
}

シンプルな方法でフォームを小枝にレンダリングしています{{ form_widget(filter_form) }}

4

2 に答える 2

21

empty_dataにオプションを追加してみてくださいnull。最初に表示されます。私はこのタイプのフィールドをたくさん持っていて、それは機能しています、例えば:

class GenderType extends \Symfony\Component\Form\AbstractType
{

    public function getDefaultOptions(array $options)
    {
        return array(
            'empty_data'  => null,
            'empty_value' => "Non specificato",
            'choices'     => array('m' => 'Uomo', 'f' => 'Donna'),
            'required'    => false,
        );
    }

    public function getParent(array $options) { return 'choice'; }

    public function getName() { return 'gender'; }

}

編集:別の可能性(私は思う)は設定するでしょうpreferred_choices。このようにして、「すべて」オプションが一番上に表示されます。しかし、それがで動作するかどうかはわかりませんが、好きなようにnull empty_data変更できempty_dataます:

  public function getDefaultOptions(array $options)
  {
    return array(
        'empty_value'       => 'All',
        'empty_data'        => null,
        'choices'           => $this->yearChoices,
        'preferred_choices' => array(null)         // Match empty_data
    );
  }
于 2012-08-06T19:48:50.017 に答える