【问题标题】:ManyToMany relationship and Symfony2 form: show some options in the form, keep the ones already saved but not shown多对多关系和 Symfony2 表单:在表单中显示一些选项,保留已保存但未显示的选项
【发布时间】:2014-01-15 09:35:38
【问题描述】:

我不确定标题,但我会尝试解释我的问题。 我有一个小网站来管理学期、课程、学生、出勤率等。使用 Symfony 2.3 和 Doctrine 2 构建。

学生注册了一些我在我的学生实体中保留的课程:

/**
* @ORM\ManyToMany(targetEntity="Course", inversedBy="students")
*/
private $courses;

网站的工作原理是这样的:您选择一个学期,然后网站将只显示与该学期相关的信息(即该学期的课程表、课程报告等)。我将所选学期保留在会话中。

所以这意味着当你想编辑一个学生资料,让她/他参加一些课程时,选择列表只显示所选学期(基本上是当前学期)的课程,因为否则你会有太多的选择和他们不会是准确的。

我在 StudentType 表单中生成这样的选择:

->add('courses', 'entity', array(
    'class' => 'VirguleMainBundle:Course',
    'query_builder' => $this->doctrine->getRepository('VirguleMainBundle:Course')->getCoursesForSemesterQB($this->semesterId),
    'expanded' => false,
    'multiple' => true,
    'required' => false,
    'attr' => array('class' => 'medium-select')
 ));

但是当我提交表单时,当然课程集合会被清空,然后填充表单中的选定选项。这意味着以前学期的学生的注册丢失了。

我尝试使用 FormEvent,手动放回以前保存的值,如下所示:

public function preSubmit(FormEvent $event) {
    $data = $event->getData();
    $form = $event->getForm();

    $currentCourses = $form->getData()->getCourses();
    foreach ($currentCourses as $course) {
        if ($course->getSemester()->getId() != $this->semesterId) {
            $data['courses'][] = $course;
        }
    }
    $event->setData($data);
    $this->customizeForm($form, false);
}

但是我得到一个“这个值无效”的错误,我猜是因为我添加了不是原始形式的数据,这是有道理的。

所以我基本上想知道如何显示例如 #20、#21 和 #22 类(链接到我们目前正在研究的第 2 学期),同时保留已保存的值 #10、# 11 和 #12(因为它们与第 1 学期相关联)。或者,如果我的设计完全失败,是否有其他解决方案可以实现这一点。

我希望这是有道理的,并且有人会帮助我,因为我被困住了:)

【问题讨论】:

    标签: php symfony doctrine-orm


    【解决方案1】:

    解决方法很简单:我已经扭转了关系

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      相关资源
      最近更新 更多