Bonjour à tous,
J'ai besoin de conseils sur des questions de méthodologie concernant les formulaires et relations entre entités. Je débute sur symfony2 évidemment
J'ai un formulaire (QCM) avec un Type et un Handler (qui sont des services). Le formulaire est construit dans le Type, puis manipulé par le Handler. Pour l'instant je récupère, valid, persist et flush dans le handler via une méthode process(). Voici le controller pour comprendre un peu mieux :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public function startAction(Request $request) { $formHandler = $this->get('test_handler'); if ($formHandler->process()) { return $this->redirect($this->generateUrl('architest_front_test_result')); } return $this->render('ArchitestFrontBundle:Test:start.html.twig', array('form' => $formHandler->getForm()->createView())); }
Je voudrais qu'à la récupération des réponses du form soit instancié un objet. Les valeurs des attributs de cet objet seraient calculées en fonction des réponses du formulaire. (Le but est que les réponses du QCM attribuent des points à chacun des attributs de cet objet).
L'entité du formulaire est Test, et je veux la lier à l'entité Profil qui contiendrait les attributs.
J'ai donc établi une relation OneToOne. Test est l'entité propriétaire, elle contient donc maintenant un attribut $profil.
Très bien... Mais l'objet Profil n'est pas instancié.
Je veux donc qu'une instance de Profil soit créée et alimentée dès que le formulaire est renvoyé par l'utilisateur.
La solution que j'ai testé est de faire une méthode __construct() dans l'entité Test qui instancie l'objet Profil. C'est peut-être une hérésie.
Le bouquin et les tutos que je consulte donnent des exemples ou les deux objets sont instanciés dans le controller.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 //Entité Test sur laquelle est construit le formulaire public function __construct() { //Est-ce une hérésie ? $this->profil = new Profil(); }
$test = new Test();
$profil = new Profil();
Puis $test->setProfil($profil) pour lier les objets.
Puis pour accéder aux méthodes de Profil : $test->getProfil()->setAttr1(3);
C'est pas mal, même si moi j'ai déplacé la logique dans le Handler, je pourrais instancier Profil à cet endroit, mais pour éviter de vérifier toutes les réponses du form, j'aimerais que l'instanciation et l'alimentation de l'objet Profil soit automatique en fonction des réponses.
Si j'instancie Profil dans la méthode __construct() de Test, je peux ensuite appeler les méthodes de Profil dans les setters de Test pour modifier les attributs de Profil ? (à moins que ce soit encore une hérésie
Le but est d'arriver à ça :
Question 3 du formulaire ---> Si réponse 'b' --> attribut2++ et attribut3-- de l'objet Profil.
Merci, n'importe quel conseil m'aidera à mieux structurer mon code.
Partager