/** * @Route("/edit/{provider}", name="provider_edit",options={"expose"=true}) * @Template("AppBundle:Provider:edit.html.twig") * @param Provider $provider * @ParamConverter("provider", class="AppBundle:Provider") * @return Response */ public function editAction(Request $request, Provider $provider) { $originalContact = new ArrayCollection(); foreach ($provider->getContacts() as $c) { $originalContact->add($c); } $originalTags = new ArrayCollection(); foreach ($provider->getTags() as $t) { $originalTags->add($t); } $form = $this->createForm(new ProviderType(), $provider); $form->handleRequest($request); if ($form->isValid()) { $em = $this->getDoctrine()->getManager(); foreach ($originalContact as $c) { if (false === $provider->getContacts()->contains($c)) { $provider->removeContact($c); $em->remove($c); } } /** @var Tag $t */ foreach ($originalTags as $t) { if (false === $provider->getTags()->contains($t)) { $t->removeProvider($provider); $em->persist($t); } } $provider->setLastModification(new \DateTime()); /** @var Tag $tag */ foreach ($provider->getTags() as $tag) { $tag->addProvider($provider); $em->persist($tag); } $em->persist($provider); $em->flush(); return $this->redirect($this->generateUrl('provider_show', array('provider' => $provider->getId()))); } return array('form' => $form->createView()); }