2013-07-03 10 views
9

1) Esiste un metodo symfony?Symfony 2: Ottieni le opzioni disponibili per una scelta Tipo di campo

Ho una forma di base (non mappato al database), con alcuni campi di scelta, ad esempio:

$builder->add('civility', 'choice', array('choices'=> array('m' => 'M.', 'mme' => 'Mme', 'mlle' => 'Mlle'))) 

Come posso - dopo che il modulo è stato Inserito - nell'azione (o , ancora meglio, nel modello), recupera il valore dell'etichetta dell'opzione anziché il valore inviato dal modulo? (In questo caso, voglio essere in grado di rendere "M" nel modello invece di "m")

Stavo pensando a qualcosa di simile $form->get("civility")->getChoiceLabel($form->get("civility")->getData())

Ma non ho trovato qualcosa di simile nella documentazione (anche se c'era qualcosa di simile in Symfony1).

2) Se davvero no, qual è il modo migliore per farlo?

Così, stavo pensando di creare alcuni metodi per farlo, nella classe di dati utilizzato dal modulo, come ..:

private $choices = array("civility" => array('m' => 'M.', 'mme' => 'Mme', 'mlle' => 'Mlle')); 
static public function getChoiceLabel($choice_value, $field_name) 
{ 
    return self::$choices[$field_name][$choice_value]; 
} 

static public function getChoices($field_name) 
{ 
    return self::$choices[$field_name]; 
} 

Ma il problema è che noi non dovremmo usare metodi statici nel template di ramoscello (devo renderlo statico per poterlo usare nella generazione di moduli, il metodo buildForm, e non duplicare del codice).

+0

Quando si stampa '$ form [ 'civiltà']' non riuscite a trovare le etichette che stai cercando ? Prova a stampare il campo prima e dopo aver chiamato 'createView' su' $ form' –

risposta

12

È possibile accedere a choses le etichette ed i loro valori in questo modo:

$form->get('civility')->getConfig()->getOption('choices'); 

Per saperne di più: Symfony\Component\Form\FormConfigInterface::getOption()

+0

Perfetto, è esattamente quello che stavo cercando! È piuttosto difficile da trovare nella documentazione, anche nell'API. Come si fa a trovare cose del genere? – Bonswouar

+0

Funzione di completamento automatico nel mio IDE (phpstorm). Ho solo cercato tutti i metodi per quella classe e ho trovato quello di cui avevo bisogno. E ovviamente la documentazione dell'API mi aiuta a volte. – Hast

Problemi correlati