Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony]2 Event Listener
lukas.skowronski
post 27.06.2011, 17:07:10
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 17.10.2007

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


Witajcie,

mam problem z Symfony2. Chciałbym osiągnąć efekt podobny do
filtrów w Symfony1.

Założenie jest takie, aby przy wejściu na stronę niezależnie od
wywołanego kontrolera i akcji wywołać metodę sprawdzającą lub
ustawiającą dowolny parametr.

Starałem się to zrobić poprzez Event Listener i definicję
services w pliku config.yml

  1. services:
  2. kernel.listener.check:
  3. class: App\NameBundle\Listener\CheckListener
  4. tags:
  5. - { name: kernel.listener, event: onCoreController }


Oraz definicję klasy CheckListener
  1. namespace App\NameBundle\Listener;
  2.  
  3. use Symfony\Component\EventDispatcher\EventDispatcher;
  4. use Symfony\Component\EventDispatcher\Event;
  5.  
  6. class CheckListener
  7. {
  8. public function onCoreController(FilterControllerEvent $event)
  9. {
  10. die('test');
  11. }
  12. }


Niestety nie zaobserwowałem żadnego efektu działania i nie mogę
doszukać się żadnego przykładu w dokumentacji jak i internecie -
może ktoś już to rozgryzł?
Go to the top of the page
+Quote Post
destroyerr
post 27.06.2011, 17:49:50
Post #2





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

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


Spróbuj tak:
Kod
services:
    kernel.listener.check:
        class: App\NameBundle\Listener\CheckListener
        tags:
            - { name: kernel.event_listener, event: kernel.controller, method: onCoreController }


Ten post edytował destroyerr 27.06.2011, 17:50:08
Go to the top of the page
+Quote Post
lukas.skowronski
post 27.06.2011, 21:55:54
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 17.10.2007

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


Ok, super - trochę mnie naprowadziłeś.

Ostatecznie wygląda to w sposób następujący:
  1. services:
  2. kernel.listener.check:
  3. class: App\NameBundle\Listener\CheckListener
  4. tags:
  5. - { name: kernel.event_listener, event: kernel.controller , method: onCoreController }


  1. namespace App\NameBundle\Listener;
  2.  
  3. use Symfony\Component\EventDispatcher\EventDispatcher;
  4. use Symfony\Component\EventDispatcher\Event;
  5.  
  6. class CheckListener
  7. {
  8.  
  9. public function onCoreController() {
  10.  
  11. die('test');
  12.  
  13. }
  14. }


Jeszcze raz dzięki! smile.gif

Ok, to może teraz ma ktoś pomysł jak dobrać się teraz do sesji w tym Listenerze?

Ewentualnie może ktoś ma inny pomysł na ten problem?
Go to the top of the page
+Quote Post
Crozin
post 27.06.2011, 22:04:10
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Przekaż obiekt sesji do tego obiektu korzystając z DIC-a?
  1. <service id="kernel.listener.check" class="App\NameBundle\Listener\CheckListener">
  2. <argument type="service" id="session" /> <!-- czy tam request.session - nie pamiętam -->
  3.  
  4. <tag name="kernel.event_listener" event="kernel.controller" method="onCoreController" />
  5. </service>
  1. class CheckListener {
  2. private Session $session;
  3.  
  4. public function __construct(Session $session) {
  5. $this->session = $session;
  6. }
  7.  
  8. public function onCoreController() {
  9. die('test');
  10. }
  11. }


Ten post edytował Crozin 27.06.2011, 22:04:30
Go to the top of the page
+Quote Post
lukas.skowronski
post 27.06.2011, 22:27:23
Post #5





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 17.10.2007

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


Dzięki za odpowiedź.

W ramach rozszerzenia w wersji yml konfiguracja będzie wyglądać tak:

  1. services:
  2. kernel.listener.check:
  3. class: App\NameBundle\Listener\CheckListener
  4. arguments: [@session]
  5. tags:
  6. - { name: kernel.event_listener, event: kernel.request , method: onCoreController}


A w definicji CheckListener musimy jeszcze pamiętać o:

  1. use Symfony\Component\HttpFoundation\Session;
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 15.08.2025 - 03:14