2015-11-28 2 views
1

Каков наилучший способ установить коллекцию пар ключей/значений (полученную из MySQL) как поле выбора «выбор» внутри контроллера? я думаю о чем-то похожем на:Как установить значения полей выбора в Symfony2?

$form = $this->createForm(new AddNews(), $news); 
$newsList = $this->getDoctrine() 
      ->getRepository('BakaMainBundle:News')->getAllNews(); 

$titlesList = ...($newsList); // some fuction that extract title=>id 
           // array from news object collection 

$form->get('newsList')->setData($titlesList); 

где AddNews() форма выглядит следующим образом:

public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add(...) 
      ->add(...) 
      ->add('accept' , 'submit') 
      ->add('newsList', 'choice', array 
      (
       'mapped' => false, 
       'required' => true 
      )); 
    } 

ответ

0

возможно что-то вроде ниже (при условии, Symfony> = 2.7). См docs варианты поля:

public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add(...) 
      ->add(...) 
      ->add('accept' , 'submit') 
      ->add('newsList', 'entity', array 
      (
       'class' => ''BakaMainBundle:News'', 
       'choice_label' => 'title', 
       'mapped' => false, 
       'required' => true 
      )); 
    } 
0

Вы можете получить «новости» прямо из файла formType, используя репозиторий, так:

private function getNews(){  
    $newsList = $this->getDoctrine() 
       ->getRepository('BakaMainBundle:News')->getAllNews(); 

    $titlesList = ...($newsList); // some fuction that extract title=>id 
            // array from news object collection 
    } 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add(...) 
      ->add(...) 
      ->add('accept' , 'submit') 
      ->add('newsList', 'choice', array 
      (
       'mapped' => false, 
       'required' => true, 
       'choices' => $this->getNews() 
      )); 
    } 
Смежные вопросы