public function addAction(Request $request) { // Création de l'entité Advert $advert = new Advert(); $advert->setTitle('Recherche développeur Symfony2.'); $advert->setAuthor('Alexandre'); $advert->setContent("Nous recherchons un développeur Symfony2 débutant sur Lyon. Blabla…"); // On peut ne pas définir ni la date ni la publication, car ces attributs sont définis automatiquement dans le constructeur // Création de l'entité Image $image = new Image(); $image->setUrl('http://sdz-upload.s3.amazonaws.com/prod/upload/job-de-reve.jpg'); $image->setAlt('Job de rêve'); // On lie l'image à l'annonce $advert->setImage($image); // Création d'une première candidature (la date est définit dans le constructeur et l'id est ajouter automatiquement) $application1 = new Application(); $application1->setAuthor('Marine'); $application1->setContent("J'ai toutes les qualités requises."); // Création d'une deuxième candidature par exemple $application2 = new Application(); $application2->setAuthor('Pierre'); $application2->setContent("Je suis très motivé."); // On lie les candidatures à l'annonce (une annonce peut contenir plusieurs candidatures) $application1->setAdvert($advert); $application2->setAdvert($advert); // On récupère l'EntityManager $em = $this->getDoctrine()->getManager(); // On récupère toutes les compétences possibles $listSkills = $em->getRepository('KaiimPlatformBundle:Skill')->findAll(); // Pour chaque compétence foreach ($listSkills as $skill) { // On crée une nouvelle « relation entre 1 annonce et 1 compétence » $advertSkill = new AdvertSkill(); // On la lie à l'annonce, qui est ici toujours la même $advertSkill->setAdvert($advert); // On la lie à la compétence, qui change ici dans la boucle foreach $advertSkill->setSkill($skill); // Arbitrairement, on dit que chaque compétence est requise au niveau 'Expert' $advertSkill->setLevel('Expert'); // Et bien sûr, on persiste cette entité de relation, propriétaire des deux autres relations $em->persist($advertSkill); } // Étape 1 a : On « persiste » l'entité $advert(pour dire que cette entité est gérée par Doctrine) // il est inutile de faire un persist($entity) lorsque $entity a été récupérée grâce à Doctrine $em->persist($advert); // Étape 1 b : si on n'avait pas défini le cascade={"persist"} dans l'entité Advert, on devrait persister à la main l'entité $image // $em->persist($image); // Etape 1 c : on persist les entités $application1 et $application2 $em->persist($application1); $em->persist($application2); // Étape 2 : On « flush » tout ce qui a été persisté avant (sauvegarde des entités) $em->flush(); // La gestion d'un formulaire est particulière, mais l'idée est la suivante : // Si la requête est en POST, c'est que le visiteur a soumis le formulaire if ($request->isMethod('POST')) { // Ici, on s'occupera de la création et de la gestion du formulaire $request->getSession()->getFlashBag()->add('notice', 'Annonce bien enregistrée.'); // Puis on redirige vers la page de visualisation de cettte annonce return $this->redirect($this->generateUrl('kaiim_platform_view', array('id' => $advert->getId()))); } // Si on n'est pas en POST, alors on affiche le formulaire return $this->render('KaiimPlatformBundle:Advert:add.html.twig'); }
/** * {@inheritDoc} */ public function getAlt() { $this->__initializer__ && $this->__initializer__->__invoke($this, 'getAlt', array()); return parent::getAlt(); }