Php Symfony2如何处理动态嵌入表单集合?

Php Symfony2如何处理动态嵌入表单集合?,php,forms,symfony,Php,Forms,Symfony,我尝试了这本关于嵌入表单的食谱: 但是嵌入外键(Tag table中的task_id字段)不是save,总是NULL 这里是完整的代码: 你知道为什么吗? 谢谢 编辑:: 我的麻烦在于行动的过程。就像标签表单是动态嵌入的,所以我不知道我会有多少标签。如果我加入createAction $tag1 = new Tag(); $task->addTags($tag1); 只有第一个嵌入表单被正确保存!如何保存其他标签 public function createAction(Request

我尝试了这本关于嵌入表单的食谱:

但是嵌入外键(Tag table中的task_id字段)不是save,总是NULL

这里是完整的代码:

你知道为什么吗? 谢谢

编辑:: 我的麻烦在于行动的过程。就像标签表单是动态嵌入的,所以我不知道我会有多少标签。如果我加入createAction

$tag1 = new Tag();
$task->addTags($tag1);
只有第一个嵌入表单被正确保存!如何保存其他标签

public function createAction(Request $request) 
{ 
    $task = new Task();
    $tag1 = new Tag();
    $task->addTags($tag1);

    $form    = $this->createForm(new TaskType(), $task);        
    $form->bindRequest($request);

    if ($form->isValid()) {
        $em = $this->getDoctrine()->getEntityManager();
        $em->persist($task);
        $em->flush();

        return $this->redirect($this->generateUrl('new_task', array('id' => $task->getId())));   
    }

    return array(
        'form'   => $form->createView()
    ); 
}
Edit2:

我解决问题的办法,你怎么看?更好

public function createAction(Request $request)
{ 
        $task = new Task();
        $tasks = $request->request->get('task', array());
        if (isset($tasks['tags'])) {
            $tags = $tasks['tags'];
            foreach($tags as $tag) {
                $tag = new Tag();
                $task->addTags($tag);
            }
        }

        $form = $this->createForm(new TaskType(), $task);        
        $form->bindRequest($request);

        if ($form->isValid()) {
            $em = $this->getDoctrine()->getEntityManager();
            $em->persist($task);
            $em->flush();

            return $this->redirect($this->generateUrl('new_task', array('id' => $task->getId())));   
        }

        return array(
            'form'   => $form->createView()
        );
}
Edit3:

更好的选择(不再测试)


在第29行的
TaskController
中,尝试使用
$task->addTags($tag1)而不是
$task->getTags()->add($tag1)

我不明白。这个解决方案错了吗

if ($form->isValid()) {
    $em = $this->getDoctrine()->getEntityManager();
    foreach($task->getTags() as $tag) {
        $tag->setTask($task);
    }
    $em->persist($task);
    $em->flush();

    return $this->redirect($this->generateUrl('new_task', array('id' => $task->getId())));   
}

如果我添加$tag1=new Tag(),另一方面它不正常(但可读性更好)$任务->添加标签($tag1);在createAction中,第一个嵌入表单已正确保存,但其他表单未正确保存!抱歉,我不记得解决方案,我切换到推进。推进岩石!
if ($form->isValid()) {
    $em = $this->getDoctrine()->getEntityManager();
    foreach($task->getTags() as $tag) {
        $tag->setTask($task);
    }
    $em->persist($task);
    $em->flush();

    return $this->redirect($this->generateUrl('new_task', array('id' => $task->getId())));   
}