Bonjour
Je suis en train de développer une application pour faire des demandes d'installation de logiciel (spécificité du logiciel, date à laquel le logiciel doit être installé, remarques complémentaires...)
L'utilisateur peux demander d'installer un logiciel existant ou d'installer un logiciel qui n'a pas encore été installé.
Concrètement on a une première partie du formulaire qui contient la liste déroulante des logiciels déjà présent dans la base.
La deuxième partie contient des champs nom, version, os pour entré un nouveau logiciel
La troisième partie du formulaire est commune au 2 partie précédente et contient la date d'installation, les remarques complémentaires...
J'arrive à faire une demande d'un nouveau logiciel (2 partie du formulaire). Par contre je bloque lorsqu'il s'agit de faire une demande en utilisant la liste déroulante.
Voici le code :
Le formulaire lié à l'entité demande
Le logiciel lié à l'entité Logiciel
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 <?php class DemandeType extends AbstractType { public function buildForm(FormBuilder $builder, array $options) { $builder->add('reflogiciel', 'entity', array('class' => 'XXX\YYY\Entity\Logiciel', 'property' => 'nom', 'expanded' => false, 'label' => 'Choisissez un logiciel dans la liste ci-dessous : ', ) ); $builder->add('RefLogiciel', new LogicielType); $builder->add('remarque', 'textarea', array('label' => 'Toute information pouvant nous être utile')); } public function getDefaultOptions(array $options) { return array( 'data_class' => 'XXX\YYY\Entity\Demande' ); } public function getName() { return 'demande'; } } ?>
Et la méthode de création dans mon controller
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 <?php class LogicielType extends AbstractType { public function buildForm(FormBuilder $builder, array $options) { $builder->add('nom', 'text', array('label' => 'Logiciel')); $builder->add('version', 'text'); $builder->add('os', 'choice', array('choices' => array('Linux' => 'Linux', 'Windows' => 'Windows', 'Mac OS' => 'Mac OS'), 'label' => 'Système d\'exploitation')); $builder->add('licence', 'choice', array('choices' => array('libre' => 'libre', 'freeware' => 'freeware', 'propriétaire' => 'propriétaire'), 'label' => 'Type de licence')); $builder->add('url', 'text', array('label' => 'Adresse web ou trouver le logiciel (s\'il n\'est pas sur le web mettez \'CD\')')); } public function getDefaultOptions(array $options) { return array( 'data_class' => 'XXX\YYY\Entity\Logiciel' ); } public function getName() { return 'logiciel'; } } ?>
Ce que je me demande c'est comment hydrater l'objet logiciel à partir de la liste déroulante.
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 <?php public function createDemandeAction() { $demande = new Demande(); $form = $this->createForm(new DemandeType(), $demande); $request = $this->get('request'); if ('POST' == $request->getMethod()) { $form->bindRequest($request); if ($form->isValid()) { $em = $this->getDoctrine()->getEntityManager(); //hydrate l'objet demande $em->persist($demande); //hydrate l'objet Logiciel $em->persist($demande->getRefLogiciel()); $em->flush(); } } return $this->render('XXXYYY:Default:createdemande.html.twig', array('environement' => $this->get('kernel')->getEnvironment(), 'form' => $form->createView())); } ?>
Partager