Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF2][SF] Wywoływanie metody bundla przy każdej odsłonie
Forum PHP.pl > Forum > PHP > Frameworki
pegaz1988
Tytuł topica jest bardzo treściwy. Chcę to zrobić w sposób najbardziej elastyczny, jak tylko się da.
Chcę, aby konkretna metoda konkretnego bundla była uruchamiana przy każdej odsłonie.
Nie chcę tego robić w sposób łopatologiczny. Wolę to zrobić porządznie, wykrzystując mechanizmy Symfony.

Czy ma ktoś jakiś pomysł?
Znalazłem komponent: event_dispatcher - czy mam iść w tym kierunku?
Czy mógłbym prosić o prosty kod?
destroyerr
Tak, masz iść w tym kierunku. Prosty kod znajdziesz w dokumentacji, zwłaszcza w cookbooku.
pegaz1988
Czy możesz mi podać linka?
Specyfikacja jest bardzo długa, jestem dopiero po przeczytaniu kilku artykułów, a akurat tego teraz potrzebuję smile.gif
destroyerr
Np. http://symfony.com/doc/current/cookbook/se...t_listener.html i wyszukanie tego nie stanowi żadnego problemu.
pegaz1988
Stworzyłem dwa pliki, dodałem linijki kodu do services.yml, usunąłem cache, ale nie wywołuje się akcja.

  1. <?
  2.  
  3. class AcmeRequestListener
  4. {
  5. public function onKernelRequest(GetResponseEvent $event)
  6. {
  7. if (!$event->isMasterRequest()) {
  8. // don't do anything if it's not the master request
  9. die('działa 1');
  10. return;
  11. }
  12. die('działa 2');
  13.  
  14.  
  15. // ...
  16. }
  17. }


Mimo takiego kodu, nie pojawia się tekst zadeklarowany w jej wnętrzu.
Chcę, aby jedna metoda uruchamiała się sama przy każdym odświeżeniu.
Crozin
Pokaż jeszcze jak podpiąłeś tę klasę w services.yml.
pegaz1988
Kod
kernel.listener.your_listener_name:
        class: AntiBotBundle\EventListener\AcmeExceptionListener
        tags:
            - { name: kernel.event_listener, event: kernel.exception, method: onKernelException }


Bundle istnieje, klasa i pliki również
ikssde
Klasa, którą pokazałeś wcześniej nazywa się AcmeRequestListener, natomiast ta w services.yml AcmeExceptionListener. Poza tym chcesz, żeby twoja metoda się wykonała za każdym uruchomieniem, a nie na kernel.exception, więc zastąp to kernel.request.

Tutaj masz wszystkie możliwe eventy dotyczące kernela.
pegaz1988
świetnie, teraz działa; zmylił mnie podany przykład w specyfikacji;
Symfony to taki kombajn, że chyba po roku ciężkiej pracy coś mi się uda w nim porządnego zrobić smile.gif
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.