ইভেন্ট ইভেন্ট হ্যান্ডলিং

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::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::emit('user.register', $user);
    }
}

পরামর্শ
Event::emit($event_name, $data); এর প্যারামিটার $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);
    }
}

ইভেন্ট ব্রডকাস্ট বন্ধ করুন

আমরা যখন ইভেন্ট প্রসেসিং ফাংশনে ফেরত দেয় ভুল তখন ব্রডকাষ্ট বন্ধ করে

ক্লোজার ফাংশনে ইভেন্ট প্রসেসিং

ইভেন্ট প্রসেসিং ফাংশন হতে পারে ক্লাস মেথড, তার মাঝে ক্লোজার ফাংশন, উদাহরণস্বরূপ

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

ইভেন্ট এবং লিসনার দেখুন

কমান্ড ব্যবহার করুন php webman event:list প্রজেক্টে কনফিগার করা সমস্ত ইভেন্ট এবং লিসনার দেখতে

মনতব্য

ইভেন্ট ইভেন্ট হ্যান্ডলিংটি অসিনক্রোনাস নয়, ইভেন্টগুলির জন্য ধীর ব্যবসা ব্যবস্থা উচিত নয়, ধীর ব্যবসা একটি মেসেজ কিউ দ্বারা ব্যবস্থা করা উচিত, উদাহরণস্বরূপ webman/redis-queue