2012-07-26 26 views
35

Dinleyicilerimi bu olaylara ekleyebilmem için user_logged adlı özel etkinlikler oluşturmak istiyorum.Symfony2'de özel olay oluşturma

ben kullanıcı oturum zaman birkaç fonksiyonları yürütmek istiyoruz.

cevap

65

Symfony\Component\EventDispatcher\Event genişleten bir sınıf oluşturun.

$eventDispatcher = $container->get('event_dispatcher'); 
$eventDispatcher->dispatch('custom.event.identifier', $event); 

Çok sevdiği olay dinleyici hizmetini kayıt olabilirsiniz:

tags: 
    - { name: kernel.event_listener, event: custom.event.identifier, method: onCustomEvent } 
+6

İyi cevap. Buna ek olarak, burada daha fazla ayrıntı var: http://symfony.com/doc/current/components/event_dispatcher/introduction.html – gview

+2

Gerçekten de, bu başlamak için basit bir yol. – Lusitanian

+0

mükemmel cevap !!, şimdi tek soru nerede özel bir olay göndermek için en iyi yerdir ?, belki bir hizmet? – Nico

19

Bu cevap biraz answer uzatmak edilir

Sonra olayı göndermesine olay memuru servisini kullanmak.

services.yml

custom.event.home_page_event: 
    class: AppBundle\EventSubscriber\HomePageEventSubscriber 
    tags: 
     - { name: kernel.event_listener, event: custom.event.home_page_event, method: onCustomEvent } 

AppBundle/EventSubscriber/HomePageEventSubscriber.php

namespace AppBundle\EventSubscriber; 
class HomePageEventSubscriber 
{ 
    public function onCustomEvent($event) 
    { 
     var_dump($event->getCode()); 
    } 
} 

AppBundle/Etkinlik/HomePageEvent.php

yerde
namespace AppBundle\Event; 
use Symfony\Component\EventDispatcher\Event; 
class HomePageEvent extends Event 
{ 
    private $code; 

    public function setCode($code) 
    { 
     $this->code = $code; 
    } 

    public function getCode() 
    { 
     return $this->code; 
    } 
} 

evde örneğin, dilek sayfa denetleyicisi

use AppBundle\Event\HomePageEvent; 
    // ... 
    $eventDispatcher = $this->get('event_dispatcher'); 
    $event = new HomePageEvent(); 
    $event->setCode(200); 
    $eventDispatcher->dispatch('custom.event.home_page_event', $event); 
+0

Harika! çok yararlı! – iamjc015

+0

@JCFrane her zaman hoşgeldiniz! –