1 pièce(s) jointe(s)
enregistrement embedForm & foreignKey
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é 8O
Mon schema est :
Code:
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 } |
Pièce jointe 64526
Dans mon action new si l'url est "/forum/new/id/1" :
Code:
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();
}
} |
dans create j'ai encore un petit bug de redirection, mais ce n'est pas le problème pour le moment :)
Code:
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');
} |
Mais si l'url est /forum/new/ j'oriente vers le Sujet et dans le fichier /lib/form/doctrine/SubjectForm.class.php
Code:
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);
}
} |
Alors comment décomposer la méthode "save" dans l'action"processForm" ?
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 :mrgreen: