я попробовать эту кулинарную книгу о встраивать форму:
http://symfony.com/doc/current/cookbook/form/form_collections.htmlSymfony2 Как обрабатывать динамические встраиваемые формы?
Но внешний ключ кода вставки (TASK_ID поля в таблице тегов) не сохранить, всегда NULL
Здесь полный код: https://gist.github.com/1755140
Знаете ли вы, почему? Спасибо
Edit:: Моя беда была в форме процесса действия. Подобно тому, как форма тега внедряется динамически, поэтому я не знаю, сколько тегов у меня будет. Если я добавлю в 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()
);
}
Не совсем (но более читаемый) С другой стороны, если я добавляю $ tag1 = new Tag(); $ Задачи-> addTags ($ tag1); в createAction первая вставка была правильно сохранена, но не остальные! – acubens