Yii ফ্রেমওয়ার্কে Behaviors এবং Events দুটি শক্তিশালী কনসেপ্ট, যা অ্যাপ্লিকেশন ডেভেলপমেন্টকে আরও নমনীয় এবং স্কেলেবল করে তোলে। এগুলো মূলত অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) এর ধারণার ওপর ভিত্তি করে তৈরি, যার মাধ্যমে আপনি কোড পুনঃব্যবহারযোগ্য, কাস্টমাইজযোগ্য এবং রিস্পন্সিভ করতে পারেন।
১. Behaviors কী?
Behavior হল একটি মেকানিজম যা একটি অবজেক্টের (মডেল, কন্ট্রোলার, কম্পোনেন্ট ইত্যাদি) আচরণ পরিবর্তন করতে পারে, কিন্তু এটি ঐ অবজেক্টের অরিজিনাল কোডের মধ্যে সরাসরি পরিবর্তন না করেই। এর মাধ্যমে আপনি একটি অবজেক্টে নতুন ফাংশনালিটি বা আচরণ যোগ করতে পারেন, যেটি মডিফাই না করে মূল ক্লাসের ভিতরে কার্যকারিতা বাড়ায়।
Behavior এর সুবিধা:
- কোড পুনঃব্যবহারযোগ্যতা: একই ফিচার একাধিক ক্লাসে পুনরায় ব্যবহার করা যেতে পারে।
- ক্লিন কোড: মূল ক্লাসের আচরণকে প্রভাবিত না করে একাধিক কার্যকারিতা যোগ করা যায়।
- সহজ কাস্টমাইজেশন: Behavior যোগ করা সহজ এবং দ্রুত।
২. Behavior এর কাজ করার প্রক্রিয়া
Behavior সাধারণত কোনো অবজেক্টের জীবনচক্রের অংশ হিসেবে কাজ করে, যেমন beforeSave, afterSave, beforeValidate, afterValidate, ইত্যাদি ইভেন্টগুলোর জন্য একটি রিঅ্যাক্টিভ ফাংশনালিটি তৈরি করতে পারে।
উদাহরণ: Custom Behavior তৈরি করা
এখানে একটি কাস্টম Behavior তৈরি করা হচ্ছে যা beforeSave ইভেন্টে কাজ করবে।
Behavior ক্লাস তৈরি করা:
components/UppercaseBehavior.php
<?php namespace app\components; use yii\base\Behavior; class UppercaseBehavior extends Behavior { public $attributes = []; // beforeSave ইভেন্টের জন্য মেথড public function events() { return [ \yii\db\ActiveRecord::EVENT_BEFORE_INSERT => 'convertToUppercase', \yii\db\ActiveRecord::EVENT_BEFORE_UPDATE => 'convertToUppercase', ]; } // টেক্সট কনভার্সন ফাংশন public function convertToUppercase($event) { foreach ($this->attributes as $attribute) { $this->owner->$attribute = strtoupper($this->owner->$attribute); } } }এখানে,
UppercaseBehaviorক্লাসটি beforeInsert এবং beforeUpdate ইভেন্টে কাস্টম ফাংশনconvertToUppercaseকল করবে, যা নির্দিষ্ট অ্যাট্রিবিউটের টেক্সটকে uppercase-এ কনভার্ট করবে।Behavior ব্যবহার করা:
এখন আপনি এই Behavior কে আপনার মডেল ক্লাসে যুক্ত করতে পারেন।
models/User.php
<?php namespace app\models; use yii\db\ActiveRecord; use app\components\UppercaseBehavior; class User extends ActiveRecord { public function behaviors() { return [ 'uppercase' => [ 'class' => UppercaseBehavior::class, 'attributes' => ['name', 'email'], ], ]; } }এখানে,
UserমডেলটিUppercaseBehaviorযোগ করেছে, যাnameএবংemailফিল্ডের ইনপুটটিকে uppercase-এ কনভার্ট করবে।
৩. Events কী?
Events হল একটি সিস্টেম যার মাধ্যমে আপনি কোডের নির্দিষ্ট পয়েন্টে কোনো অ্যাকশন বা কার্যকারিতা ট্রিগার করতে পারেন। Yii ফ্রেমওয়ার্কে ইভেন্ট সিস্টেম একটি এক্সটেনসিভ ফিচার হিসেবে কাজ করে, যা অবজেক্টের লাইফসাইকেলের বিভিন্ন পয়েন্টে ফাংশন চালানো সম্ভব করে।
Event এর সুবিধা:
- ডিকাপলিং: ইভেন্টের মাধ্যমে কোডের একত্রিত অংশগুলোকে একে অপর থেকে আলাদা রাখা যায়।
- ডাইনামিক একশন: নির্দিষ্ট ইভেন্টে নির্দিষ্ট একশন ট্রিগার করা যায়।
- কাস্টম ফাংশনালিটি: কোডের মধ্যে পটভূমিতে কার্যকারিতা চালানো যায়।
৪. Event এর কাজ করার প্রক্রিয়া
Yii-তে ইভেন্ট ব্যবহারের জন্য একটি ক্লাসের trigger() মেথড কল করতে হয় এবং এটি ট্রিগার হওয়ার পর কোনো লিসেনার (অথবা হ্যান্ডলার) সেট করা হয়, যা সেই ইভেন্টটি শুনে এবং নির্দিষ্ট কাজ করে।
উদাহরণ: Custom Event তৈরি করা
এখানে একটি কাস্টম ইভেন্ট তৈরি করা হচ্ছে, যা একটি মডেল সেভ হওয়ার পর ট্রিগার হবে।
Event তৈরি করা:
components/CustomEvent.php
<?php namespace app\components; use yii\base\Event; class CustomEvent extends Event { public $message; }এখানে,
CustomEventএকটি কাস্টম ইভেন্ট যা একটিmessageপ্যারামিটার রাখে।Event ট্রিগার করা:
ইভেন্ট ট্রিগার করতে, আপনাকে
trigger()মেথড ব্যবহার করতে হবে।models/User.php
<?php namespace app\models; use yii\db\ActiveRecord; use app\components\CustomEvent; class User extends ActiveRecord { const EVENT_USER_CREATED = 'userCreated'; public function afterSave($insert, $changedAttributes) { parent::afterSave($insert, $changedAttributes); if ($insert) { $this->trigger(self::EVENT_USER_CREATED, new CustomEvent([ 'message' => 'User created successfully!' ])); } } }এখানে, afterSave ইভেন্টে একটি কাস্টম ইভেন্ট
EVENT_USER_CREATEDট্রিগার করা হচ্ছে। যখন একটি নতুন ইউজার তৈরি হয়, তখন এটি"User created successfully!"মেসেজ পাঠাবে।Event লিসেনার তৈরি করা:
এখন, আপনি ইভেন্টটি শুনে একটি কার্যকরী হ্যান্ডলার তৈরি করতে পারেন।
controllers/UserController.php
<?php namespace app\controllers; use Yii; use app\models\User; class UserController extends \yii\web\Controller { public function init() { parent::init(); // ইভেন্ট লিসেনার রেজিস্টার করা $this->on(User::EVENT_USER_CREATED, [$this, 'onUserCreated']); } // ইভেন্ট হ্যান্ডলার public function onUserCreated($event) { Yii::info($event->message, __METHOD__); } public function actionCreate() { $user = new User(); $user->name = 'John Doe'; $user->email = 'john@example.com'; $user->save(); } }এখানে,
UserControllerএরinit()মেথডে onUserCreated ইভেন্ট হ্যান্ডলার সেট করা হয়েছে, যা"User created successfully!"মেসেজটি লগ করে।
৫. Behaviors এবং Events এর তুলনা
| বৈশিষ্ট্য | Behaviors | Events |
|---|---|---|
| কার্যকারিতা | আচরণ পরিবর্তন (অথবা অতিরিক্ত ফাংশনালিটি যোগ) | নির্দিষ্ট পয়েন্টে কোড ট্রিগার করা |
| কোড পরিবর্তন | কোড পরিবর্তন ছাড়া নতুন ফাংশনালিটি যোগ করা যায় | কোডের নির্দিষ্ট অংশে কার্যকারিতা যোগ করা যায় |
| ব্যবহার | ক্লাসের আচরণ পরিবর্তন করতে ব্যবহৃত হয় | ক্লাসের লাইফসাইকেল পয়েন্টে ফাংশনালিটি চালানো যায় |
সারাংশ
Yii ফ্রেমওয়ার্কে Behaviors এবং Events দুটি গুরুত্বপূর্ণ কনসেপ্ট যা অ্যাপ্লিকেশনকে আরও মডুলার, নমনীয় এবং রিইউজেবল করে তোলে। Behavior ব্যবহার করে আপনি কোনো অবজেক্টের আচরণ পরিবর্তন করতে পারেন, আর Events ব্যবহার করে আপনি কোডের নির্দিষ্ট পয়েন্টে কার্যকারিতা ট্রিগার করতে পারেন। এই দুটি কনসেপ্ট একসাথে ব্যবহার করে আপনি Yii অ্যাপ্লিকেশনে শক্তিশালী এবং কাস্টমাইজযোগ্য ফিচার তৈরি করতে পারেন।