2012-08-06 9 views
9

Ho creato un elenco a discesa campo modulo personalizzato per il filtraggio per anno. Una delle cose che voglio fare è consentire all'utente di filtrare per tutti gli anni, che è l'opzione predefinita. Sto aggiungendo questo come empty_value. Tuttavia, quando eseguo il rendering del modulo, esso si imposta automaticamente sul primo elemento che non è il valore vuoto. Il valore vuoto è lì, appena sopra l'elenco. Come faccio a rendere la pagina predefinita, nel mio caso 'Tutti' quando la pagina inizialmente viene caricata? Il codice è sottoCome impostazione predefinita per la scelta empty_value in un tipo di campo modulo symfony personalizzato?

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

sto rendendo la mia forma in ramoscello con un semplice {{ form_widget(filter_form) }}

risposta

19

Prova ad aggiungere empty_data opzione per null, in modo che viene prima. Ho molti campi di questo tipo e che sta funzionando, ad esempio:

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: Un'altra possibilità (suppongo) sarebbe impostazione preferred_choices. In questo modo otterrai l'opzione "Tutti" in alto. Ma non so se può funzionare con nullempty_data, ma si può cambiare empty_data a quello che vuoi:

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 ... ora funziona e io non so perché. Penso di aver dovuto svuotare il mio cache o qualcosa del genere? Le opzioni 'All' erano mostrate in alto, ma quella selezionata era 2nd o qualcosa. Ora è correttamente predefinito per l'opzione superiore. – Squazic

+0

@Squazic bene, va bene :) Forse è il caching o forse non hai ricaricato l'intera pagina ... – gremo

+0

Ho funzionato aggiungendo 'empty_value' e' empty_data' ma ora l'utente può saltare tutte le convalide richieste e inviare senza selezionare alcuna delle opzioni effettivamente valide. – phpguru

Problemi correlati