以一种形式编辑多个实体

时间:2015-07-21 07:20:49

标签: php symfony

我有一个实体Question和表单类型,用于编辑问题QuestionType。我可以成功编辑一个问题。现在我创建一个用于编辑所有问题的链接。

我想以一种形式编辑所有问题,我该如何处理?我尝试使用集合,但我不知道如何在表单集合中映射单个问题,我不确定这是否是正确的方法。

我的QuestionType看起来像:

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $categories = $this->entityManager->getRepository('MyAppBundle:QuestionCategory')->findByIsActive(true);

        $builder->add('category', 'entity', array(
                        'class' => 'MyAppBundle:QuestionCategory',
                        'choices' => $categories,
                        'label' => 'category',
                        'translation_domain' => 'messages',
                        'multiple' => false,
                        'empty_value' => 'msg.pleaseSelect',
                        'expanded' => false))
                ->add('translations', 'a2lix_translations', array(
                            'fields' => array(
                                'text' => array(
                                    'field_type' => 'textarea',
                                    'label' => 'hintText',
                                    'attr' => array('class' => 'rte')
                                ),
                                'explanation' => array(
                                    'field_type' => 'textarea',
                                    'label' => 'title',
                                    'attr' => array('class' => '')
                                )
                            )
                ));
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'My\AppBundle\Entity\Question',
        ));
    }

我的控制器采取行动编辑所有问题,如下所示:

$em = $this->getDoctrine()->getManager();
$questions = $em->getRepository('MyAppBundle:Question')->findAll();

/**
  * -- Here is my problem , how can i my $questions into form? --- 
**/          
$form = $this->createFormBuilder()
    ->add('questions', 'collection', array(
            'type' => new QuestionType() ,
            'allow_add' => false,
            'allow_delete' => false,
            'label' => false)
    )
    ->add('save', 'submit', array('label' => 'Create'))
    ->getForm();


$form->handleRequest($request);

if ($form->isValid()) {
}

return $this->render('MyAppBundle:Question:editAllQuestions.html.twig', array("form" => $form->createView()));

有人提示或接近吗?

1 个答案:

答案 0 :(得分:0)

您正走在正确的轨道上,您可能想要做的是:

$form->setData(array('questions' => $yourQuestionArray));

->getForm()之后但在->handleRequest($request)之前。

或者您可以将其作为选项传递给createFormBuilder(),如下所示:

$form = $this->createFormBuilder(array('questions' => $yourQuestionArray))
    ->add(...)

他们都做同样的事情。

通常,当您创建表单类(它看起来像您使用QuestionType时所做的那样)时,您提供了一个data_class配置选项(see documentation)来定义什么表格用作模型。

你在控制器中所做的是创造一种匿名的#34;没有关联数据类(documentation的表单,这看起来就像您在控制器中所做的那样)。在这种情况下,它的数据是一个数组(类似地,如果你调用$form->getData(),你得到一个数组)。