/** * @Route("/add/{type}", name="add_item") */ public function addItemAction($type, Request $request) { $repository = $this->getDoctrine()->getRepository('AppBundle:Item'); if (!$repository->setType($type)) { throw new \AppBundle\Exception\InvalidItemTypeException($type); } switch ($type) { case "restaurant": $item = new \AppBundle\Entity\Items\Restaurant(); case "doctor": $item = new \AppBundle\Entity\Items\Doctor(); } $tag = new Tag(); $tag->setContent("Test"); // $item->addTag($tag); $form = $this->createForm(ItemType::class, $item); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $item->setCreationDate(new \DateTime('now')); $item->setModificationDate(new \DateTime('now')); $item->setLocation(new Point($form->get('longitude')->getData(), $form->get('latitude')->getData())); //FIXME: This is a workaround, mapping should be automatical foreach ($form->get('tags') as $tag) { $t = new Tag(); $t->setType($tag->get('type')->getData()); $t->setContent($tag->get('content')->getData()); $t->setItem($item); $item->addTag($t); } $em = $this->getDoctrine()->getManager(); $em->persist($item); $em->flush(); return $this->redirectToRoute('display', array("id" => $item->getId())); /* return $this->render('add/' . $type . '.html.twig', [ 'form' => $form->createView(), 'item' => $item, ]); */ } else { return $this->render('add/' . $type . '.html.twig', ['form' => $form->createView()]); } }