Boujour à tous! Je développe une application où je dois remplir des bordereaux de notes pour une classe.
Les différentes classes que je gère sont:
Exam pour la composition, Student pour l'étudiant, Mark pour la note et ClassRoom pour la classe.
Je souhaite faire le réaliser l'édition des notes en une seule fois j'ai pensé faire une combinaison de formulaires de type Mark en un seul formulaire.
J'ai donc redefini le formulaire Mark de base afin d'afficher comme label le nom de l'étudiant comme ceci:
et j'ai combiné les MarkForm comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 class MarkForm extends BaseMarkForm { public function configure() { parent::configure(); $this->useFields(array('value')); $student =$this->getObject()->getStudent(); $completeName = $student->getCompleteName(); $this->widgetSchema->setLabels(array( 'value' => $completeName )); } }
le code de l'action qui traite le formulaire est:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 class ExamMarksCollectionForm extends BaseForm { public function configure() { $exam = $this->getOption('exam'); if (!$exam) { throw new InvalidArgumentException('You must provide an Exam object'); } $class = $exam->getCourse()->getClassRoom(); $students = $class->getOrderedStudentList(true); $subForm = new sfForm(); foreach($students as $student){ $mark = new Mark(); $mark->Student = $student; $mark->Exam = $exam; $form = new MarkForm($mark); $subForm->embedForm($student->getId(), $form); } $this->embedForm('marks', $subForm); } }
le modèle des données est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 public function executeCreate(sfWebRequest $request){ $this->exam = $this->getRoute()->getObject(); $this->form = new ExamMarksCollectionForm(null, array( 'exam' => $this->exam )); $this->processForm($request, $this->form); $this->setTemplate('edit'); } protected function processForm(sfWebRequest $request, sfForm $form){ $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName())); if ($form->isValid()){ $form->save(); $this->redirect('mark_index'); } }
Malheureusement le formulaire est retourné et les champs sont marqués comme requis.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73 Student: inheritance: extends: sfGuardUser type: concrete columns: matricule: { type: string(50), notnull: false, unique: true } class_room_id: { type: integer, notnull: false} relations: ClassRoom: {onDelete: CASCADE, local: class_room_id, foreign: id, foreignAlias: Students} ClassRoom: actAs: Sluggable: fields: [ code ] unique: true canUpdate: true columns: code: { type: string(10), notnull: true, unique: true } label: { type: string(255), notnull: true, unique: true } relations: Disciplines: { foreignAlias: ClassRooms, class: Discipline, refClass: Course } Professor: columns: name: { type: string(255), notnull: true } surname: { type: string(255), notnull: true } Discipline: columns: label: { type: string(255), notnull: true, unique: true } Course: columns: id: { type: integer, primary: true, autoincrement: true } discipline_id: { type: integer } class_room_id: { type: integer } professor_id: { type: integer, notnull: true } relations: Professor: { onDelete: CASCADE, local: professor_id, foreign: id, foreignAlias: Courses } ClassRoom: { foreignAlias: Courses } Discipline: { foreignAlias: Courses } Program: columns: start: { type: timestamp, notnull: true } end: { type: timestamp, notnull: true } course_id: { type: integer, notnull: true } relations: Course: { onDelete: CASCADE, local: course_id, foreign: id, foreignAlias: Programs } CourseProgram: inheritance: extends: Program type: concrete columns: place: { type: string(20), notnull: true } Exam: inheritance: extends: Program type: concrete relations: Students: { foreignAlias: Exams, class: Student, refClass: Mark } Mark: columns: student_id: { type: integer, primary: true } exam_id: { type: integer, primary: true } value: { type: float, notnull: false } relations: Student: { foreignAlias: Marks } Exam: { foreignAlias: Marks }
Le problème est peut-être au niveau de $form->bind mais j'ai essayé toutes les combinaison possibles sans résultat. I need help!
Partager