2012-07-26 44 views

回答

65

創建延伸Symfony\Component\EventDispatcher\Event類。

然後,使用事件調度服務調度的事件:

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

你可以像這樣註冊事件偵聽器服務:

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

很好的答案。另外,這裏有更多的細節:http://symfony.com/doc/current/components/event_dispatcher/introduction.html – gview 2012-07-26 01:44:05

+2

確實,但這是一個足夠簡單的方法開始。 – Lusitanian 2012-07-26 01:45:17

+0

優秀的答案!!現在唯一的問題是哪裏是派遣自定義事件的最佳地點?也許服務? – Nico 2013-08-07 19:05:26

19

這個答案有點擴大answer

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 /事件/ HomePageEvent.php

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

任何你願意的話,例如在家裏頁面控制器

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

太棒了!很有幫助! – iamjc015 2016-09-14 09:42:45

+0

@JCFrane歡迎隨時! – 2016-09-14 09:55:51