इवेंट हैंडलिंग

webman/event एक परिष्कृत इवेंट तंत्र प्रदान करता है जो कोड को बदले बिना व्यावसायिक लॉजिक चलाने में सक्षम बनाता है और मॉड्यूलों के बीच डीकपलिंग हासिल करता है। विशिष्ट परिदृश्य: जब कोई नया उपयोगकर्ता सफलतापूर्वक पंजीकरण करता है, तो बस user.register जैसा कस्टम इवेंट प्रकाशित करें, और प्रत्येक मॉड्यूल इवेंट प्राप्त कर संबंधित लॉजिक चला सकता है।

इंस्टॉलेशन

composer require webman/event

इवेंट की सदस्यता

इवेंट सदस्यता config/event.php फ़ाइल के माध्यम से केंद्रीय रूप से कॉन्फ़िगर की जाती है।

<?php
return [
    'user.register' => [
        [app\event\User::class, 'register'],
        // ...अन्य इवेंट हैंडलिंग फ़ंक्शन...
    ],
    'user.logout' => [
        [app\event\User::class, 'logout'],
        // ...अन्य इवेंट हैंडलिंग फ़ंक्शन...
    ]
];

नोट:

  • user.register, user.logout इत्यादि इवेंट नाम हैं (स्ट्रिंग टाइप)। छोटे अक्षरों में शब्द और बिंदु (.) से अलग करने की सलाह दी जाती है।
  • एक इवेंट में कई हैंडलिंग फ़ंक्शन हो सकते हैं; कॉन्फ़िगरेशन क्रम में कॉल किए जाते हैं।

इवेंट हैंडलिंग फ़ंक्शन

हैंडलिंग फ़ंक्शन कोई भी क्लास मेथड, फ़ंक्शन या क्लोजर हो सकता है।

उदाहरण: app/event/User.php क्लास बनाएं (डिरेक्टरी न हो तो बनाएं)।

<?php
namespace app\event;
class User
{
    function register($user)
    {
        var_export($user);
    }

    function logout($user)
    {
        var_export($user);
    }
}

इवेंट प्रकाशित करना

Event::dispatch($event_name, $data); या Event::emit($event_name, $data); से इवेंट प्रकाशित करें। उदाहरण:

<?php
namespace app\controller;
use support\Request;
use Webman\Event\Event;
class User
{
    public function register(Request $request)
    {
        $user = [
            'name' => 'webman',
            'age' => 2
        ];
        Event::dispatch('user.register', $user);
    }
}

प्रकाशित करने के लिए दो फ़ंक्शन हैं: Event::dispatch($event_name, $data); और Event::emit($event_name, $data); — दोनों के पैरामीटर समान। अंतर: emit अंदर ही एक्सेप्शन पकड़ लेता है; अगर एक फ़ंक्शन में एक्सेप्शन फेंका जाए तो बाकी चलते रहते हैं। dispatch एक्सेप्शन नहीं पकड़ता; किसी फ़ंक्शन में एक्सेप्शन आने पर चाल रुक जाती है और एक्सेप्शन ऊपर प्रचारित हो जाता है।

संकेत
$data पैरामीटर कोई भी डेटा हो सकता है, जैसे ऐरे, क्लास इंस्टेंस, स्ट्रिंग आदि।

वाइल्डकार्ड इवेंट लिसनिंग

वाइल्डकार्ड रजिस्ट्रेशन से एक ही लिसनर पर कई इवेंट हैंडल किए जा सकते हैं। उदाहरण config/event.php में:

<?php
return [
    'user.*' => [
        [app\event\User::class, 'deal']
    ],
];

हैंडलिंग फ़ंक्शन के दूसरे पैरामीटर $event_data से विशिष्ट इवेंट नाम प्राप्त हो सकता है:

<?php
namespace app\event;
class User
{
    function deal($user, $event_name)
    {
        echo $event_name; // विशिष्ट इवेंट नाम, जैसे user.register, user.logout आदि
        var_export($user);
    }
}

इवेंट ब्रॉडकास्ट रोकना

हैंडलिंग फ़ंक्शन में false लौटाने पर उस इवेंट की ब्रॉडकास्ट रुक जाती है।

क्लोजर से इवेंट हैंडलिंग

हैंडलिंग फ़ंक्शन क्लास मेथड या क्लोजर हो सकता है। उदाहरण:

<?php
return [
    'user.login' => [
        function($user){
            var_dump($user);
        }
    ]
];

इवेंट और लिसनर देखना

php webman event:list कमांड से प्रोजेक्ट में कॉन्फ़िगर किए गए सभी इवेंट और लिसनर देखे जा सकते हैं।

समर्थन परिधि

मुख्य प्रोजेक्ट के अलावा बेस प्लगइन और ऐप प्लगइन दोनों event.php कॉन्फ़िगरेशन सपोर्ट करते हैं।
बेस प्लगइन कॉन्फ़िग फ़ाइल: config/plugin/वेंडर/प्लगइन-नाम/event.php
ऐप प्लगइन कॉन्फ़िग फ़ाइल: plugin/प्लगइन-नाम/config/event.php

ध्यान दें

इवेंट हैंडलिंग अतुल्यकालिक नहीं है और धीमे व्यवसाय के लिए उपयुक्त नहीं है; धीमे व्यवसाय के लिए webman/redis-queue जैसे मैसेज क्यू उपयोग करें।