Forms 使用未列出的数据填充的模型
我有两个模型,课程和评估。每节课可以有多个评估 我正在尝试设置一个嵌入式表单,允许用户同时输入所有这些数据 它可以很好地添加和编辑数据,但是如果我试图删除一个评估,我会遇到一个问题 例如,我有一节附有三个评估的课。然后我再次提交表格,但其中一个已删除 在控制器中,我首先获取正在编辑的课程,然后获取其评估并循环它们,打印ID。按预期打印三个ID 接下来,我将请求绑定到表单并检查它是否有效。然后我再次获取评估,并再次循环检查它们是否已被删除,但所有三个ID仍然存在 如果我打印原始POST数据,则只有两个 谁能看出我做错了什么 这是我的控制器代码:Forms 使用未列出的数据填充的模型,forms,symfony,doctrine-orm,Forms,Symfony,Doctrine Orm,我有两个模型,课程和评估。每节课可以有多个评估 我正在尝试设置一个嵌入式表单,允许用户同时输入所有这些数据 它可以很好地添加和编辑数据,但是如果我试图删除一个评估,我会遇到一个问题 例如,我有一节附有三个评估的课。然后我再次提交表格,但其中一个已删除 在控制器中,我首先获取正在编辑的课程,然后获取其评估并循环它们,打印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 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';
}
}
谢谢你的建议
谢谢。我认为你的表格没有与班级绑定好 看看这里 表单应该是这样的
$builder
->add('name lesson')
->add('evaluation', 'collection', array('type'=>new EvaluationsType()))
您需要创建一个嵌入其他表单的新表单类
另一种方法是手动检查发布的数据,并在控制器中手动删除评估,然后再次保留课程我通过使用:
$lesson = $form->getData();
嗨,这是我一直在关注的页面,试图让它工作。我现在已经将我的表单类添加到我的原始帖子中。您必须调试它,首先尝试在没有任何课程对象的情况下创建表单,然后查看是否仍然可以看到所有ID或仅显示发布的数据。首先,我们必须看看表单是否正确绑定。ie for
$lesson
创建空对象,保存后,数据库中将有新对象。然后看看它是否只包含2次蒸发
$lesson = $form->getData();