2012-08-06 14 views
9

Yıllara göre filtrelemek için özel form alanı açılan listesi oluşturdum. Yapmak istediğim şeylerden biri, kullanıcının varsayılan seçenek olan tüm yıllara göre filtrelemesine izin vermektir. Bunu bir empty_value olarak ekliyorum. Ancak, formu oluşturduğumda, boş değer olmayan ilk öğede varsayılan olur. Boş değer orada, listede sadece üstünde. Sayfa varsayılan olarak, sayfa ilk olarak yüklendiğinde 'Tümü' olarak nasıl yapılır? Kod aşağıda.Özel bir symfony form alanı türünde boş_değer seçimine varsayılan değer nasıl verilir?

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'; 
    } 
} 

Ben null için empty_data seçeneği ekleyerek basit {{ form_widget(filter_form) }}

cevap

19

deneyin ile dal benim formunu render ediyorum, bu yüzden önce gelir. Ben bu tip birçok alanları var ve bu örneğin çalışıyor:

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'; } 

} 

EDIT: Bir başka olasılık (herhalde) preferred_choices ayarı olacaktır. Bu sayede "Tümü" seçeneğini en üste alacaksınız. Ama nullempty_data çalışabilirsiniz eğer ben bilmiyorum, ama sen ne istersen empty_data değiştirebilirsiniz:

public function getDefaultOptions(array $options) 
    { 
    return array(
     'empty_value'  => 'All', 
     'empty_data'  => null, 
     'choices'   => $this->yearChoices, 
     'preferred_choices' => array(null)   // Match empty_data 
    ); 
    } 
+0

Hmm ... şimdi çalışıyor ve neden emin değilim. Önbelleğimi veya bir şeyimi temizlemek zorunda mıyım? 'Tümü' seçenekleri üstte gösteriliyordu, ancak seçileni 2 ya da bir şeydi. Şimdi üst seçeneğe uygun şekilde varsayılan. – Squazic

+0

@Squazic peki, sorun değil :) Belki de önbellekleniyor veya sayfanın tamamını yeniden yüklemediniz ... – gremo

+0

Bunu 'empty_value' ve 'empty_data' ekleyerek işe aldım ama şimdi kullanıcı gerekli tüm doğrulamaları atlayabilir ve gerçek geçerli seçeneklerden herhangi birini seçmeden gönderin. – phpguru

İlgili konular