我有两个模型,课程和评估。每节课可以有多个评价。
我正在尝试设置一个嵌入式表单,允许用户同时输入所有这些数据。
它可以很好地添加和编辑数据,但是如果我尝试删除评估,我会遇到问题。
例如,我有一堂课附有三个评估。然后我再次提交表单,但其中一个被删除。
在控制器中,我首先得到正在编辑的课程,然后得到它的评估并循环通过它们,打印 ID。三个 id 按预期打印。
接下来,我将请求绑定到表单并检查它是否有效。然后我再次获得评估并再次遍历它们以检查它们是否已被删除,但是所有三个 id 仍然存在!
如果我打印原始 POST 数据,则只有两个。
谁能看到我做错了什么?
这是我的控制器代码:
public function editAction($id = NULL)
{
$lesson = new Lesson;
if ( ! empty($id))
{
$lesson = $this->getDoctrine()
->getRepository('LessonBundle:Lesson')
->find($id);
}
foreach ($lesson->getEvaluations() as $evaluation)
{
print_r($evaluation->getId());
print_r('<br />');
}
$form = $this->createForm(new LessonType(), $lesson);
$request = $this->getRequest();
if ($request->getMethod() == 'POST') {
$form->bindRequest($request);
if ($form->isValid()) {
foreach ($lesson->getEvaluations() as $evaluation)
{
print_r($evaluation->getId());
print_r('<br />');
}
die();
$em = $this->getDoctrine()->getEntityManager();
$em->persist($lesson);
$em->flush();
}
}
}
这是我的课程表:
class LessonType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('evaluations', 'collection', array(
'type' => new EvaluationType(),
'allow_add' => true,
'by_reference' => false,
'allow_delete' => true,
));
}
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'LessonBundle\Entity\Lesson',
);
}
public function getName()
{
return 'Lesson';
}
}
最后,我的评估表:
class EvaluationType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('report');
}
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'LessonBundle\Entity\Evaluation',
);
}
public function getName()
{
return 'Evaluation';
}
}
任何建议表示赞赏。
谢谢。