2012-08-06 6 views
9

Mam utworzoną niestandardową listę rozwijaną pola formularza do filtrowania według roku. Jedną z rzeczy, które chcę zrobić, jest zezwolenie użytkownikowi na filtrowanie przez wszystkie lata, co jest opcją domyślną. Dodaję to jako empty_value. Jednak po wyrenderowaniu formularza domyślnie jest on ustawiony na pierwszy element, który nie jest pustą wartością. Jest tam pusta wartość, tuż nad nią na liście. Jak ustawić domyślną stronę, w moim przypadku "Wszystkie", gdy strona ładuje się początkowo? Kod znajduje się poniżej.Jak domyślnie wybrać opcję empty_value w niestandardowym typie pola formularza symfony?

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

Mam renderowania moją postać w gałązka z prostym {{ form_widget(filter_form) }}

Odpowiedz

19

spróbuj dodać empty_data opcję null, więc chodzi w pierwszej kolejności. Mam wiele pól tego typu i to działa, na przykład:

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: Inna możliwość (przypuszczam) byłoby ustawienie preferred_choices. W ten sposób dostaniesz opcję "Wszystkie" u góry. Ale nie wiem, czy można pracować z nullempty_data, ale można zmienić empty_data aby cokolwiek chcesz:

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 ... to teraz działa i nie jestem pewien dlaczego. Chyba musiałem wyczyścić moją skrzynkę lub coś takiego? Opcje "Wszystkie" były wyświetlane u góry, ale wybrana była druga lub coś podobnego. Teraz domyślnie jest ustawiona na najwyższą opcję. – Squazic

+0

@Squazic well, that's ok :) Może to buforowanie lub może nie załadowałeś ponownie całej strony ... – gremo

+0

Mam to do pracy przez dodanie 'empty_value' i' empty_data', ale teraz użytkownik może pominąć wszystkie wymagane sprawdzanie i przesłać bez wybrania żadnej z faktycznie ważnych opcji. – phpguru

Powiązane problemy