Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF2][SF][Symfony] EventListener - metoda postUpdate
Forum PHP.pl > Forum > PHP > Frameworki
damianooo
Zarejestrowałem sobie serwis i stworzyłem EventListenera z metodą postUpdate, która jak dobrze rozumiem działa w momencie gdy robiony jest Update na danej entity.

Zrobiłem więc stronę, na której edytuję wybrany mecz, wpisuję wynik i klikam przycisk "Zapisz" .
Dane w bazie dla entity Meet zostają zaktualizowane , jednak Event Listener wygląda na to że nie zadziałał ponieważ ani w logach nie mam info o żadnych błędach , ani w bazie danych w entity Type, której pole NumberOfPoints miało być zaktualizowane nie jest wypełnione.

services.yml

  1. service:
  2. ....
  3. result_listener:
  4. class: AppBundle\EventListener\ResultListener
  5. tags:
  6. - { name: doctrine.event_listener, event: postUpdate }


AppBundle\EventListener\ResultListener.php

  1. namespace AppBundle\EventListener;
  2. use Doctrine\ORM\Event\LifecycleEventArgs;
  3.  
  4. class ResultListener {
  5. public function postUpdate(LifecycleEventArgs $args)
  6. {
  7. $entity = $args->getEntity();
  8. $em = $args->getEntityManager();
  9.  
  10. if ($entity instanceof Meet) {
  11. $meet_id = $entity->getId();
  12. $typeRepo = $em->getRepository('AppBundle:Type');
  13. $types = $typeRepo->findByMeetId($meet_id);
  14.  
  15. foreach ($types as $type){
  16. $type->setNumberOfPoints(4);
  17. $em->persist($type);
  18. }
  19.  
  20. $em->flush();
  21. }
  22. }
  23. }
nospor
  1. public function postUpdate(LifecycleEventArgs $args)
  2. {
  3. die('Jak mnie widzisz to jednak dzialam');
  4. //reszta kodu
  5. //.......
damianooo
tak tak zauważyłem to że w tej linii kodu działa zarówno die jak var_dump i exit....

Problem ze zdebugowaniem pojawia się po IFie a więc w czasie Update w bazie...

Rozumiem jednak że "na bank" program wchodzi w tym momencie w IFa ? smile.gif
nospor
Nigdzie nie masz
use .....Meet

WIec Meet jest nieokreslone
damianooo
Zgadza się, brakowało użycia klasy Meet.
Poza tym źle pobierałem obiekt klasy Type.

Ma być tak:

  1. namespace AppBundle\EventListener;
  2.  
  3. use Doctrine\ORM\Event\LifecycleEventArgs;
  4. use AppBundle\Entity\Meet;
  5.  
  6. class ResultListener {
  7. public function postUpdate(LifecycleEventArgs $args)
  8. {
  9. $entity = $args->getEntity();
  10. $em = $args->getEntityManager();
  11.  
  12. if ($entity instanceof Meet) {
  13. $meet_id = $entity->getId();
  14. $typeRepo = $em->getRepository('AppBundle:Type');
  15. $types = $typeRepo->findByMeet($meet_id);
  16.  
  17. foreach ($types as $type){
  18. $type->setNumberOfPoints(4);
  19. $em->persist($type);
  20. }
  21. $em->flush();
  22. }
  23. }
  24. }


Działa to pięknie ! O to mi właśnie chodziło !
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.