2012-07-26 15 views
35

में कस्टम ईवेंट कैसे बनाएं I user_logged नामक कस्टम ईवेंट बनाना चाहते हैं ताकि मैं अपने श्रोताओं को उन घटनाओं से जोड़ सकूं।symfony2

मैं कुछ कार्यों को निष्पादित करने के लिए जब भी उपयोगकर्ता में लॉग इन किया है चाहता हूँ।

उत्तर

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

+2

दरअसल, लेकिन यह शुरू करने के लिए एक आसान तरीका है। – Lusitanian

+0

उत्कृष्ट उत्तर !!, अब एकमात्र प्रश्न यह है कि कस्टम इवेंट भेजने के लिए सबसे अच्छी जगह कहां है ?, शायद एक सेवा? – Nico

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

+0

@JCFrane किसी भी समय आपका स्वागत है! –