Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SF2][SF][Symfony] EventListener - metoda postUpdate, Nie działa listner po update danych
damianooo
post
Post #1





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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. }


Ten post edytował damianooo 12.02.2017, 22:13:30
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




  1. public function postUpdate(LifecycleEventArgs $args)
  2. {
  3. die('Jak mnie widzisz to jednak dzialam');
  4. //reszta kodu
  5. //.......
Go to the top of the page
+Quote Post
damianooo
post
Post #3





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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 ? (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Nigdzie nie masz
use .....Meet

WIec Meet jest nieokreslone
Go to the top of the page
+Quote Post
damianooo
post
Post #5





Grupa: Zarejestrowani
Postów: 496
Pomógł: 2
Dołączył: 15.07.2011
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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 !
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.09.2025 - 11:46