【发布时间】: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