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