Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms 使用未列出的数据填充的模型_Forms_Symfony_Doctrine Orm - Fatal编程技术网

Forms 使用未列出的数据填充的模型

Forms 使用未列出的数据填充的模型,forms,symfony,doctrine-orm,Forms,Symfony,Doctrine Orm,我有两个模型,课程和评估。每节课可以有多个评估 我正在尝试设置一个嵌入式表单,允许用户同时输入所有这些数据 它可以很好地添加和编辑数据,但是如果我试图删除一个评估,我会遇到一个问题 例如,我有一节附有三个评估的课。然后我再次提交表格,但其中一个已删除 在控制器中,我首先获取正在编辑的课程,然后获取其评估并循环它们,打印ID。按预期打印三个ID 接下来,我将请求绑定到表单并检查它是否有效。然后我再次获取评估,并再次循环检查它们是否已被删除,但所有三个ID仍然存在 如果我打印原始POST数据,则只有

我有两个模型,课程和评估。每节课可以有多个评估

我正在尝试设置一个嵌入式表单,允许用户同时输入所有这些数据

它可以很好地添加和编辑数据,但是如果我试图删除一个评估,我会遇到一个问题

例如,我有一节附有三个评估的课。然后我再次提交表格,但其中一个已删除

在控制器中,我首先获取正在编辑的课程,然后获取其评估并循环它们,打印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();