2012-08-06 57 views
9

我有一個創建自定義表單域下拉列表按年篩選。我想要做的一件事是讓用戶過濾所有年份,這是默認選項。我將這添加爲empty_value。但是,當我渲染表單時,它默認在第一個不是空值的項目上。空值就在那裏,就在它的上面。當頁面初始加載時,如何將頁面默認設置爲「全部」?代碼如下。你如何默認自定義symfony表單字段類型中的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) }}

回答

19

嘗試增加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。通過這種方式,您將獲得頂部的「全部」選項。但我不知道它是否能與nullempty_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 
    ); 
    } 
+0

嗯......現在的工作,我不知道爲什麼。我想我必須清除我的緩存或什麼?所有選項都顯示在頂部,但選定的選項是第二個或其他。現在它正確地默認爲頂部選項。 – Squazic 2012-08-06 21:28:29

+0

@Squazic很好,沒關係:)也許它是緩存或者你沒有重新加載整個頁面... – gremo 2012-08-06 21:34:03

+0

我得到這個工作,通過添加'empty_value'和'empty_data',但現在用戶可以跳過所有需要的驗證和提交而不選擇任何實際有效的選項。 – phpguru 2015-04-01 18:56:07

相關問題