Dlaczego listener nie wysyła poprawnie produktów w linii $event->getZamowienie()->getZamowienieProdukty()
a chwilę później kontroler robi to poprawnie w linii $produkty = $zamowienie->getZamowienieProdukty()
W debugerze w obu przypadkach $produkty są typu doctrine/orm/persistentcollection i wyglądają identycznie (ale w obu przypadkach nie widać jakie dane przechowują)
//Manager, tu zapisuje dane do db i wypstrykuję dispatchera class ZamowienieManager { public function tworzZamowienie($klient) { $zamowienie = new Zamowienie(); $zamowienie->setIdklient($klient); $zamowienie->setDatazlozeniacurrent(); $this->tworzProduktyZamowienia($zamowienie); $this->em->persist($klient); $this->em->persist($zamowienie); $this->em->flush(); $this->dispatcher->dispatch(OrderPlacedEvent::NAME, new OrderPlacedEvent($zamowienie)); $this->addFlashBag($zamowienie); } private function tworzProduktyZamowienia($zamowienie) { foreach ($this->cart as $isbn => $quantity) { $ksiazka = $this->em ->getRepository('AppBundle:Ksiazka') ->find($isbn); $zm = new ZamowienieProdukt(); $zm->setIdzamowienie($zamowienie); $zm->setIsbn($ksiazka); $zm->setTytul($ksiazka->getTytul()); $zm->setAutor($ksiazka->getAutor()); $zm->setIlosc($quantity); $this->em->persist($zm); } } public function addFlashBag($zamowienie){ $this->session->getFlashBag()->add( 'idzamowienie',$zamowienie->getIdzamowienie();); } }
//Listener. wysyła maila potwierdzającego zamówienie. POPRAWNIE WYŚWIETLA DANE ZAMÓWIENIA, NIE WYŚWIETLA PRODUKTÓW. class Listener { public function onOrderPlaced(OrderPlacedEvent $event) { ... $body = $this->renderTemplate($event); ... } private function renderTemplate($event) { return $this->twig->render( 'AppBundle:Cart:potwierdzenieMail.html.twig', 'zamowienie'=>$event->getZamowienie(), 'produkty'=>$event->getZamowienie()->getZamowienieProdukty() ) ); }
//kontroler, POPRAWNIE WYŚWIETLA DANE ZAMÓWIENIA, I PRODUKTY. public function potwierdzenieAction(Request $request) { $idzamowienie=$request->getSession()->getFlashBag()->get('idzamowienie'); $zamowienie = $this->getDoctrine() ->getRepository('AppBundle:Zamowienie') ->find($idzamowienie[0]); $produkty = $zamowienie->getZamowienieProdukty(); return $this->render('AppBundle:Cart:potwierdzenie.html.twig',[ 'zamowienie'=>$zamowienie, 'produkty'=>$produkty]); }
Czy to chodzi o to, że bez przeładowania strony nie mogę wywołać powiązanej z Entity/Zamowienie (ManyToOne) kolekcji (Doctrine\Common\Collections\Collection) którą zwraca ->getZamowienieProdukty(), gdy ten obiekt (new Zamowienie) dopiero co utworzyłem i dopiero co zapisałem go flush() do bazy danych? (wiem, że to zdanie wygląda jakby było pisane przed dałna, staram się jak mogę, zasób słów jest jaki jest)