如何在Symfony2中设置选择字段值


How to set choice field values in Symfony2?

将键/值对集合(从MySQL获得)设置为控制器内的选项字段"选项"的最佳方法是什么?我想到了类似的东西:

 $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
            ));
    }

也许如下(假设Symfony>=2.7)。有关字段选项,请参阅文档:

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

您可以使用存储库直接从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()
            ));
    }