2014-07-16 43 views
8

Özel etkinlik oluşturmaya çalışıyorum, ancak çalışmasını sağlayamıyorum.Symfony2 özel olay dağıtıcısı ve dinleyicisi

Ben ne yaptım:

1.I oluşturulan olay tanımlayan sınıf

namespace Path\ToBundle\EventListener; 
use Path\ToBundle\Event\FilterResponseEvent; 
class ResponseListener 
{ 
    public function onCookieInit(FilterResponseEvent $event) 
    { 
     //some complex logic goes here 
     echo('test'); 
    } 
} 

3.created olay dinleyicisi

namespace Path\ToBundle\Event; 
use Symfony\Component\EventDispatcher\Event; 
use Symfony\Component\HttpFoundation\Response; 
class FilterResponseEvent extends Event 
{ 
    protected $response; 
    public function __construct(Response $response) 
    { 
     $this->response = $response; 
    } 
    public function getResponse() 
    { 
     return $this->response; 
    } 
} 
namespace Path\ToBundle; 
final class CookieEvents 
{ 
    const COOKIE_EVENT = 'cookie.event'; 
} 

2.Created olay

yılında

4.Tried service.yml içindeki

kernel.listener.cookie.event: 
    class: Path\ToBundle\Event\ResponseListener 
    tags: 
     - { name: kernel.event_listener, event: cookie.event, method: onCookieInit } 

5.Next etkinlik işleyici kaydetmek için ben denetleyici eylem içine olayını göndermek için denemek

//includes before class 
use Symfony\Component\EventDispatcher\EventDispatcher; 
use Path\ToBundle\Event\FilterResponseEvent; 

//inside controller action 
//... $response variable is created 

$dispatcher = new EventDispatcher(); 
$event = new FilterResponseEvent($response); 
$dispatcher->dispatch(CookieEvents::COOKIE_EVENT, $event); 

return $response; 
//EOF controller action 

Ne elde etmek çalışıyorum belirli işlemlere daha mümkün yangın olay olmaktır. Ne yazık ki bu işe yaramıyor. Olaylar konsepti benim için yeni ve hala burada yaptığım şeyden emin değilim, ama örneklerden ne anlayabildiğim. Belki birisi doğru yöne gidip beni düzeltip düzeltmeyeceğimi söyleyebilirdi? Aksi takdirde, bazı rehberlik daha da takdir edilmektedir.

+3

$ memuru = $ this-> Farklı bir örnek kullanacağınız gibi ('event_dispatcher') olsun. – qooplmao

+2

Bu, özel olayların nasıl ayarlanacağının mükemmel bir örneğidir – lopsided

cevap

4

sayesinde @Qoop memuru doğru kullanımını işaret için: Ayrıca

$dispatcher = $this->get('event_dispatcher') 

, ad hata oluştu: sizin `kullanmalıdır memuru için

class: Path\ToBundle\Event\ResponseListener //incorrect 

class: Path\ToBundle\EventListener\ResponseListener //correct 
İlgili konular