Bonjour,
J'ai un petit souci avec mon formulaire imbriqué pour enregistrer la clef primaire dans la 2e table.
Pour créer un petit forum tout simple, j'ai 2 tables : une "message" qui contient une ForeignKey qui relie le message à une table "Subject" qui contient la liste des sujets.
Quand j'ajoute un message, pas de souci. La clef primaire est bien embarqué dans mon formulaire puique le suject existe déjà. Par contre lors de la création d'un nouveau sujet, j'imbrique le formulaire "message" car il est impossible de créer un nouveau sujet dans un forum sans écrire un message ! Mais le souci, viens du fait que ce formulaire ne connait pas d'avance sa ForeignKey tant que le suject n'est pas enregistré
Mon schema 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
22
23
24
25
26
27
28 Message: tableName: forum_message actAs: timestampable columns: subject_id: integer author: string(45) message: string() created_at: timestamp updated_at: timestamp relations: subject: local: subject_id foreign: id foreignAlias: messages Subject: tableName: forum_subject actAs: timestampable columns: title: string(45) author: string(45) hit: integer(4) created_at: timestamp updated_at: timestamp numb_response: integer(4) slug_title: string(255) is_activated: { type: boolean, default: 1 }
Dans mon action new si l'url est "/forum/new/id/1" :
dans create j'ai encore un petit bug de redirection, mais ce n'est pas le problème pour le moment
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public function executeNew(sfWebRequest $request) { if($request->getParameter('id')){ $this->form = new MessageForm(); }else{ $this->form = new SubjectForm(); } }
Mais si l'url est /forum/new/ j'oriente vers le Sujet et dans le fichier /lib/form/doctrine/SubjectForm.class.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public function executeCreate(sfWebRequest $request) { if($request->getParameter('id')){ $this->form = new MessageForm(); }else{ $this->form = new SubjectForm(); } $this->processForm($request, $this->form); $this->setTemplate('new'); }
Alors comment décomposer la méthode "save" dans l'action"processForm" ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 class SubjectForm extends BaseSubjectForm { public function configure() { unset($this['subject_id'], $this['author'], $this['hit'],$this['numb_response'], $this['slug_title'],$this['is_activated'], $this['created_at'], $this['updated_at']); $message = new Message(); $message->subject = $this->getObject(); $form = new MessageForm($message); $this->embedForm('Message', $form); } }
Car sans symfony est doctrine, je ferais 2 requettes : une pour créer le nouveau Sujet, puis "mysql_insert_id()" pour récupérer l'ID de l'insertion et après je pourrais sauver le message en le reliant avec l'ID de sa ForeigneKey, si je suis bien claire !?
Dans tous les cas merci d'avance de vos réponses pour enfin arriver à créer ce petit forum, car mes internautes comme moi en avons marre de phpBB![]()
Partager