Yii ফ্রেমওয়ার্কে Behaviors এমন একটি শক্তিশালী ফিচার যা ক্লাসের মধ্যে পুনঃব্যবহারযোগ্য কোড যুক্ত করতে সহায়তা করে, বিশেষ করে যখন আপনি একটি ক্লাসে নতুন ফাংশনালিটি যোগ করতে চান, কিন্তু তার মূল লজিক বা কাঠামো পরিবর্তন করতে চান না। এটি সাধারণত একটি ক্লাসের ইভেন্টের সাথে যুক্ত করা হয় এবং কাস্টম আচরণ (custom behavior) হিসেবে কাজ করে।
১. Behavior কী?
Behavior হল এমন একটি সিএমএল (component behavior) যা ক্লাসের মূল ফাংশনালিটিতে নতুন ফাংশনালিটি বা আচরণ যোগ করে। Yii তে ক্লাসের behaviors() মেথডের মাধ্যমে এটি যুক্ত করা হয়। এটি একটি ক্লাসে একাধিক বৈশিষ্ট্য যোগ করতে এবং ইভেন্ট হ্যান্ডলিং করতে সহায়তা করে।
২. Custom Behavior তৈরি করা
Custom behavior তৈরি করতে হলে প্রথমে আপনাকে একটি কাস্টম behavior ক্লাস তৈরি করতে হবে, যা yii\base\Behavior থেকে ইনহেরিট করবে। এই ক্লাসে আপনার কাস্টম ফাংশনালিটি বা লজিক থাকবে।
উদাহরণ: একটি Custom Behavior তৈরি করা
ধরা যাক, আপনি একটি behavior তৈরি করতে চান যা একটি মডেল সংরক্ষণ করার আগে কিছু অতিরিক্ত কাজ করবে (যেমন ডেটা লোগিং)।
Custom Behavior ক্লাস তৈরি করুন:
আপনার প্রজেক্টের components ফোল্ডারে একটি ফাইল তৈরি করুন, যেমন
LogBehavior.php।components/LogBehavior.php
<?php namespace app\components; use yii\base\Behavior; use yii\db\ActiveRecord; class LogBehavior extends Behavior { public $message; // মডেল সেভ হওয়ার আগে কিছু কাজ করার জন্য ইভেন্ট হুক public function events() { return [ ActiveRecord::EVENT_BEFORE_INSERT => 'logBeforeInsert', ActiveRecord::EVENT_BEFORE_UPDATE => 'logBeforeUpdate', ]; } // INSERT করার আগে লোগ মেসেজ লগ করা public function logBeforeInsert($event) { \Yii::info($this->message . ' - নতুন ডেটা সংরক্ষিত হচ্ছে', __METHOD__); } // UPDATE করার আগে লোগ মেসেজ লগ করা public function logBeforeUpdate($event) { \Yii::info($this->message . ' - ডেটা আপডেট হচ্ছে', __METHOD__); } }এখানে, LogBehavior ক্লাসটি yii\base\Behavior থেকে ইনহেরিট করা হয়েছে এবং এটি একটি message প্রপার্টি ব্যবহার করে, যেটি ইনপুট ডেটা বা ইভেন্টের ধরনের উপর ভিত্তি করে লোগ মেসেজ তৈরি করবে।
৩. Behavior ক্লাস মডেলে যুক্ত করা
এখন আপনি আপনার মডেলে LogBehavior যুক্ত করবেন। উদাহরণস্বরূপ, ধরুন আপনার একটি Post মডেল আছে এবং আপনি সেখানে LogBehavior যুক্ত করতে চান।
Post মডেল ক্লাসে Behavior যুক্ত করা:
// app/models/Post.php
namespace app\models;
use yii\db\ActiveRecord;
use app\components\LogBehavior;
class Post extends ActiveRecord
{
public function behaviors()
{
return [
'logBehavior' => [
'class' => LogBehavior::class,
'message' => 'পোস্ট অপারেশন'
],
];
}
// অন্যান্য মডেল মেথড
}
এখানে, behaviors() মেথডে LogBehavior যুক্ত করা হয়েছে। এই behavior এ একটি কাস্টম মেসেজ প্যারামিটার পাস করা হচ্ছে, যা মডেল অপারেশন (insert বা update) অনুযায়ী লোগ মেসেজে ব্যবহার হবে।
৪. Behavior এবং Event হ্যান্ডলিং
Behavior-এর মাধ্যমে আপনি সহজেই ক্লাসের ইভেন্টগুলো হ্যান্ডেল করতে পারেন। Yii তে ক্লাসের ইভেন্ট (যেমন beforeSave, afterSave, beforeDelete, ইত্যাদি) খুবই গুরুত্বপূর্ণ এবং এগুলোর মাধ্যমে আপনি বিভিন্ন কার্যক্রম সম্পাদন করতে পারেন।
উদাহরণ: Behavior এর মাধ্যমে afterSave ইভেন্ট হ্যান্ডল করা
public function events()
{
return [
ActiveRecord::EVENT_AFTER_INSERT => 'logAfterInsert',
ActiveRecord::EVENT_AFTER_UPDATE => 'logAfterUpdate',
];
}
public function logAfterInsert($event)
{
\Yii::info("নতুন পোস্ট সেভ হয়েছে", __METHOD__);
}
public function logAfterUpdate($event)
{
\Yii::info("পোস্ট আপডেট হয়েছে", __METHOD__);
}
এখানে, afterSave ইভেন্টের মাধ্যমে নতুন ডেটা সেভ হওয়ার পর বা আপডেট হওয়ার পর লোগ মেসেজ রেকর্ড করা হচ্ছে।
৫. Behavior ব্যবহার করার সুবিধা
- পুনঃব্যবহারযোগ্য কোড: Behavior ব্যবহারের মাধ্যমে আপনি একাধিক ক্লাসে একই ধরনের লজিক বা কোড পুনঃব্যবহার করতে পারেন।
- ক্লিন কোড: এটি ক্লাসের মধ্যে লজিক ভেঙে ফেলে এবং কোডকে আরও পরিষ্কার এবং মডুলার করে তোলে।
- ইভেন্ট হ্যান্ডলিং: Behavior এর মাধ্যমে আপনি ইভেন্ট হ্যান্ডলিং সহজেই করতে পারেন, যেমন ডেটা সেভ হওয়ার আগে বা পরে কাস্টম লজিক রান করা।
সারাংশ
Yii ফ্রেমওয়ার্কে Custom Behavior তৈরি করা আপনাকে পুনঃব্যবহারযোগ্য কোড লিখতে এবং ইভেন্ট হ্যান্ডলিং সহজ করতে সহায়তা করে। আপনি যখন কোনও ক্লাসে নতুন ফিচার বা আচরণ (behavior) যোগ করতে চান, তখন আপনি yii\base\Behavior থেকে একটি কাস্টম behavior ক্লাস তৈরি করতে পারেন। এটি ক্লাসের সাথে যুক্ত ইভেন্ট হ্যান্ডলিংয়ের মাধ্যমে অ্যাপ্লিকেশনের কার্যকারিতা আরও উন্নত করতে সহায়ক।