event ईवेंट हैंडलिंग
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