Я пробую эту кулинарную книгу о форме встраивания:
http://symfony.com/doc/current/cookbook/form/form_collections.html
Но внешний ключ встраивания (поле task_id в таблице тегов) не сохраняется, всегда NULL
Вот полный код: https://gist.github.com/1755140
Знаете почему?Спасибо
Редактировать: : Моя проблема была в процессе действия формы.Как форма тега встроена динамически, поэтому я не знаю, сколько тегов у меня будет.Если я добавлю в 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:
Гораздо лучшая альтернатива (больше не тестировалась)
http://www.siteduzero.com/tutoriel-3-523899-creer-des-formulaires-avec-symfony2.html#ss_part_2
public function createAction(Request $request)
{
$task = new Task();
$form = $this->createForm(new TaskType(), $task);
$form->bindRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getEntityManager();
$em->persist($task);
foreach($task->getTags() as $tag) {
$em->persist($tag);
}
$em->flush();
return $this->redirect($this->generateUrl('new_task', array('id' => $task->getId())));
}
return array(
'form' => $form->createView()
);
}