Yii এর ইভেন্ট-ড্রিভেন প্রোগ্রামিং

অ্যাডভান্সড টপিকস এবং বেস্ট প্র্যাকটিস - জী ফ্রেমওয়ার্ক (Yii Framework) - Web Development

253

ইভেন্ট-ড্রিভেন প্রোগ্রামিং (Event-driven Programming) একটি প্রোগ্রামিং প্যাটার্ন, যেখানে কোডের প্রবাহ ইভেন্টের উপর নির্ভরশীল থাকে। Yii ফ্রেমওয়ার্কে ইভেন্ট-ড্রিভেন প্রোগ্রামিং একটি গুরুত্বপূর্ণ ধারণা, যা অ্যাপ্লিকেশনকে আরও নমনীয় এবং কাস্টমাইজযোগ্য করে তোলে। Yii-এর ইভেন্ট সিস্টেম ডেভেলপারদের ইভেন্ট পরিচালনা এবং তাদের উপর ভিত্তি করে এক্সটেনশন বা হুক তৈরি করার সুযোগ দেয়।

Yii ফ্রেমওয়ার্কে ইভেন্ট সাধারণত একটি নির্দিষ্ট ঘটনার (যেমন ডেটা সেভ, রিকোয়েস্ট প্রোসেসিং ইত্যাদি) পরিপ্রেক্ষিতে কার্যকর হয়। ইভেন্টের মাধ্যমে আপনি অ্যাপ্লিকেশনটির নির্দিষ্ট অংশে কাস্টম লজিক প্রয়োগ করতে পারেন, যা অ্যাপ্লিকেশনটির আচরণ পরিবর্তন করতে সহায়তা করে।


ইভেন্ট এবং হ্যান্ডলার

Yii ফ্রেমওয়ার্কে, ইভেন্ট একটি নির্দিষ্ট ঘটনার প্রতিনিধিত্ব করে, এবং হ্যান্ডলার সেই ঘটনার জন্য নির্ধারিত কাজটি সম্পন্ন করে। সাধারণত, একটি ইভেন্ট ঘটলে, তার সাথে সংযুক্ত হ্যান্ডলার ফাংশন বা মেথডটি কল করা হয়। Yii এর ইভেন্ট সিস্টেম খুবই শক্তিশালী এবং এটি ক্লাসের মধ্যে একাধিক ইভেন্ট পরিচালনা করতে সক্ষম।

ইভেন্ট সিস্টেমের মৌলিক উপাদানগুলো:

  • ইভেন্ট: একটি নির্দিষ্ট কার্যক্রম বা ঘটনা (যেমন, ডেটা সেভ হওয়া বা ব্যবহারকারী লগইন করা)।
  • হ্যান্ডলার: একটি মেথড বা ফাংশন যা ইভেন্ট ঘটলে কল করা হয়।
  • ইভেন্ট ডিজপ্যাচিং: একটি ইভেন্ট যখন ঘটে, তখন সংশ্লিষ্ট হ্যান্ডলারগুলিকে কল করা।

Yii তে ইভেন্ট ব্যবহার করা

Yii তে ইভেন্ট ব্যবহারের জন্য, আপনাকে প্রথমে একটি ক্লাসে ইভেন্ট ডিফাইন করতে হয়, তারপর সেই ইভেন্টের জন্য হ্যান্ডলার যোগ করতে হয়। Yii এ, ইভেন্টগুলোর জন্য trigger() এবং on() মেথড ব্যবহার করা হয়।


১. একটি কাস্টম ইভেন্ট তৈরি করা

Yii-তে ইভেন্ট তৈরি করার জন্য সাধারণত yii\base\Event ক্লাসটি ব্যবহার করা হয়। তবে অনেক সময় আপনি সরাসরি ইভেন্ট ট্রিগার করতে পারেন।

উদাহরণ: কাস্টম ইভেন্ট তৈরি

namespace app\components;

use yii\base\Component;

class MyComponent extends Component
{
    const EVENT_AFTER_SOMETHING = 'eventAfterSomething'; // কাস্টম ইভেন্ট

    public function doSomething()
    {
        // কিছু কার্যক্রম
        $this->trigger(self::EVENT_AFTER_SOMETHING); // ইভেন্ট ট্রিগার
    }
}

এখানে EVENT_AFTER_SOMETHING একটি কাস্টম ইভেন্ট তৈরি করা হয়েছে, যা doSomething() মেথডের পর ট্রিগার হবে।


২. ইভেন্টের জন্য হ্যান্ডলার যুক্ত করা

একবার একটি ইভেন্ট তৈরি হয়ে গেলে, আপনাকে সেই ইভেন্টের জন্য একটি হ্যান্ডলার বা কাস্টম মেথড তৈরি করতে হবে, যা ইভেন্ট ট্রিগার হওয়ার পর কল হবে।

উদাহরণ: ইভেন্ট হ্যান্ডলার সংযুক্ত করা

namespace app\controllers;

use app\components\MyComponent;

class SiteController extends \yii\web\Controller
{
    public function actionIndex()
    {
        $component = new MyComponent();
        
        // ইভেন্ট হ্যান্ডলার যুক্ত করা
        $component->on(MyComponent::EVENT_AFTER_SOMETHING, function() {
            echo 'ইভেন্ট ট্রিগার হয়েছে!';
        });
        
        $component->doSomething(); // ইভেন্ট ট্রিগার হবে
    }
}

এখানে, SiteController ক্লাসের মধ্যে MyComponent এর EVENT_AFTER_SOMETHING ইভেন্টের জন্য একটি হ্যান্ডলার যোগ করা হয়েছে। যখন doSomething() মেথড কল হবে, তখন এই ইভেন্টটি ট্রিগার হবে এবং হ্যান্ডলারটি কল হবে।


৩. ক্লাসের মধ্যে ইভেন্ট এবং হ্যান্ডলার ব্যবহারের উদাহরণ

Yii তে ইভেন্ট এবং হ্যান্ডলার ব্যবহারের আরেকটি সাধারণ উদাহরণ হলো ক্লাসের মধ্যে ইভেন্ট সংযুক্ত করা এবং হ্যান্ডলার কল করা।

উদাহরণ: ActiveRecord এর সাথে ইভেন্ট

Yii ActiveRecord এ অনেক ইভেন্ট থাকে, যেগুলি ডাটাবেস অপারেশন যেমন beforeSave, afterSave, beforeDelete ইত্যাদির সাথে সংযুক্ত থাকে। আপনি এই ইভেন্টগুলির উপর ভিত্তি করে কাস্টম লজিক অ্যাড করতে পারেন।

namespace app\models;

use yii\db\ActiveRecord;

class Post extends ActiveRecord
{
    const EVENT_AFTER_SAVE = 'afterSave';

    public function afterSave($insert, $changedAttributes)
    {
        $this->trigger(self::EVENT_AFTER_SAVE); // afterSave ইভেন্ট ট্রিগার করা
        parent::afterSave($insert, $changedAttributes);
    }
}

এখানে Post মডেলের afterSave() ইভেন্টের জন্য একটি কাস্টম হ্যান্ডলার তৈরি করা হয়েছে, যা ডাটাবেস সেভ হওয়ার পরে ট্রিগার হবে।


৪. ইভেন্টের ডেটা প্রেরণ

কখনো কখনো ইভেন্টের সাথে অতিরিক্ত তথ্য বা ডেটা পাঠানোর প্রয়োজন হয়। Yii ইভেন্ট সিস্টেমের মধ্যে আপনি ইভেন্টের সাথে ডেটা প্রেরণ করতে পারেন, যা হ্যান্ডলার ফাংশনে ব্যবহৃত হবে।

উদাহরণ: ইভেন্টে ডেটা প্রেরণ

namespace app\components;

use yii\base\Event;
use yii\base\Component;

class MyComponent extends Component
{
    const EVENT_AFTER_SOMETHING = 'eventAfterSomething';

    public function doSomething()
    {
        $event = new Event(); // নতুন ইভেন্ট তৈরি
        $event->data = 'কাস্টম ডেটা'; // ডেটা প্রেরণ

        $this->trigger(self::EVENT_AFTER_SOMETHING, $event); // ইভেন্ট ট্রিগার
    }
}

এখানে Event অবজেক্টের মধ্যে অতিরিক্ত ডেটা যোগ করা হয়েছে, যা হ্যান্ডলার ফাংশনে অ্যাক্সেস করা যাবে।


৫. ইভেন্টের Priorities (প্রাধান্য)

Yii তে, একটি ইভেন্টের জন্য একাধিক হ্যান্ডলার থাকতে পারে। আপনি ইভেন্টের হ্যান্ডলারের জন্য priority নির্ধারণ করতে পারেন, যাতে একাধিক হ্যান্ডলার থাকলে কোনটি আগে কল হবে তা নির্ধারণ করা যায়।

উদাহরণ: হ্যান্ডলারের প্রাধান্য নির্ধারণ

$component->on(MyComponent::EVENT_AFTER_SOMETHING, function() {
    echo 'হ্যান্ডলার ১';
}, 1); // প্রাধান্য ১

$component->on(MyComponent::EVENT_AFTER_SOMETHING, function() {
    echo 'হ্যান্ডলার ২';
}, 2); // প্রাধান্য ২

এখানে, হ্যান্ডলার ২ বেশি প্রাধান্য পাবে, এবং প্রথমে কল হবে।


সারাংশ

Yii ফ্রেমওয়ার্কে ইভেন্ট-ড্রিভেন প্রোগ্রামিং একটি শক্তিশালী এবং নমনীয় পদ্ধতি যা আপনার অ্যাপ্লিকেশনটির আচরণকে আরও কাস্টমাইজযোগ্য এবং মডুলার করে তোলে। ইভেন্ট সিস্টেম ব্যবহার করে আপনি কোডের প্রবাহকে আরও কার্যকরভাবে নিয়ন্ত্রণ করতে পারেন। Yii তে ইভেন্ট ট্রিগার, হ্যান্ডলার যোগ, এবং কাস্টম ইভেন্ট তৈরি করা খুবই সহজ এবং এতে আপনি ডেটা প্রেরণ, প্রাধান্য নির্ধারণ, এবং একাধিক ইভেন্ট হ্যান্ডলার ব্যবহারের মতো সুবিধা পেতে পারেন। এই সিস্টেমটি ওয়েব অ্যাপ্লিকেশনের উন্নয়নে বড় ধরনের ভূমিকা রাখতে সক্ষম।

Content added By
Promotion

Are you sure to start over?

Loading...