2013-07-03 11 views
9

1) Czy istnieje metoda symfony?Symfony 2: Uzyskaj dostępne opcje wyboru Pole Typ

Mam podstawową formę (nie mapowane do bazy danych), z niektórych pól wyboru, na przykład:

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

Jak mogę - po formie został zgłosił - w akcji (lub , jeszcze lepiej, w szablonie), pobrać wartość etykiety z opcji zamiast z przesłanej postaci wartości? (W tym przypadku, Chcę być w stanie renderować „M.” w szablonie zamiast „m”)

Myślałam o czymś takim $form->get("civility")->getChoiceLabel($form->get("civility")->getData())

Ale nie mogę znaleźć coś takiego w dokumentacji (chociaż coś takiego było w Symfony1).

2) Jeśli naprawdę nie, jaki jest najlepszy sposób, aby to zrobić?

Tak więc, myślałem o tworzeniu kilka sposobów, aby to zrobić, w klasie danych wykorzystywanych przez formę, jak ..:

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

Ale problemem jest to, że nie powinniśmy używać statyczne metody w szablonie gałązki (muszę uczynić go statycznym, aby móc go używać w generowaniu formularzy, w metodzie buildForm i nie duplikować niektórych kodów).

+0

Podczas drukowania '$ form [„uprzejmości”]' nie można znaleźć etykiety, którego szukasz ? Spróbuj wydrukować pole przed i po wywołaniu 'createView' na' $ form' –

Odpowiedz

12

można uzyskać dostęp wybiera etykiet i ich wartości tak:

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

Więcej: Symfony\Component\Form\FormConfigInterface::getOption()

+0

Idealne, właśnie tego szukałem! Trudno znaleźć w dokumentacji, nawet w interfejsie API. Jak zwykle można znaleźć takie rzeczy? – Bonswouar

+0

Funkcja autouzupełniania w moim IDE (phpstorm). Po prostu szukałem wszystkich metod dla tej klasy i znalazłem to, czego potrzebuję. Również dokumentacja API ofcourse pomaga mi czasem. – Hast