Yii ফ্রেমওয়ার্কে ইভেন্ট-ভিত্তিক প্রোগ্রামিং একটি গুরুত্বপূর্ণ বৈশিষ্ট্য। ইভেন্ট লিসেনারস এবং হ্যান্ডলারস ব্যবহার করে আপনি অ্যাপ্লিকেশনের বিভিন্ন ইভেন্ট ট্র্যাক করতে এবং সেই ইভেন্টের প্রতি প্রতিক্রিয়া (reaction) জানাতে পারেন। ইভেন্টের মাধ্যমে একাধিক কার্যক্রম সমন্বিত করা সম্ভব, যেমন ব্যবহারকারীর একশন বা সিস্টেমের কোনো পরিবর্তন।
এই প্রক্রিয়া অ্যাপ্লিকেশনকে আরও নমনীয় এবং কাস্টমাইজেবল করে তোলে। Yii ফ্রেমওয়ার্কে ইভেন্ট এবং লিসেনারস ব্যবহার করা হয় মডেল, কন্ট্রোলার, বা কাস্টম ক্লাসে বিভিন্ন ইভেন্ট ট্রিগার করার জন্য, এবং তারপর এই ইভেন্টগুলির প্রতি প্রতিক্রিয়া জানাতে হ্যান্ডলারস ব্যবহার করা হয়।
১. ইভেন্ট কি?
Yii ফ্রেমওয়ার্কে একটি ইভেন্ট হলো একটি নির্দিষ্ট ক্রিয়া বা অবস্থা যা ঘটে এবং অন্য কোনো কোড তাকে পর্যবেক্ষণ (listen) করতে পারে। উদাহরণস্বরূপ, একটি ব্যবহারকারী লগইন করলে "UserLoggedIn" ইভেন্ট ঘটতে পারে, এবং অন্য একটি কোড এই ইভেন্টটির প্রতি প্রতিক্রিয়া জানিয়ে ব্যবহারকারীকে স্বাগত জানাতে পারে।
২. ইভেন্ট লিসেনারস
ইভেন্ট লিসেনারস হল সেই কোড বা মেথড, যা কোনো ইভেন্ট ঘটলে তা ট্রিগার করে এবং ইভেন্টের প্রতি প্রতিক্রিয়া জানায়। Yii-তে ইভেন্ট লিসেনারস পদ্ধতি attach() অথবা on() মেথডের মাধ্যমে ইভেন্টে যোগ করা যায়।
২.১. ইভেন্ট লিসেনারস যোগ করা
// app/components/User.php
namespace app\components;
use yii\base\Component;
use yii\base\Event;
class User extends Component
{
const EVENT_USER_LOGGED_IN = 'userLoggedIn';
public function login($username, $password)
{
// লজিক: ব্যবহারকারী লগইন হলে ইভেন্ট ট্রিগার হবে
if ($username === 'admin' && $password === 'password') {
$this->trigger(self::EVENT_USER_LOGGED_IN, new Event());
}
}
}
এখানে User ক্লাসে EVENT_USER_LOGGED_IN নামে একটি ইভেন্ট তৈরি করা হয়েছে। লগইন সফল হলে এই ইভেন্টটি ট্রিগার হবে।
২.২. ইভেন্ট লিসেনারস ব্যবহার করা
// app/controllers/SiteController.php
namespace app\controllers;
use Yii;
use app\components\User;
class SiteController extends \yii\web\Controller
{
public function actionIndex()
{
$user = new User();
// ইভেন্ট লিসেনার যোগ করা
$user->on(User::EVENT_USER_LOGGED_IN, function ($event) {
Yii::info('User logged in successfully!');
});
// লগইন প্রসেস
$user->login('admin', 'password');
}
}
এখানে, User::EVENT_USER_LOGGED_IN ইভেন্টের প্রতি একটি লিসেনার (callback) যোগ করা হয়েছে। যখন লগইন সফল হবে, তখন একটি লগ মেসেজ Yii::info() ব্যবহার করে প্রদর্শিত হবে।
৩. ইভেন্ট হ্যান্ডলার
ইভেন্ট হ্যান্ডলার হলো সেই কোড বা ফাংশন যা ইভেন্টটি ঘটলে কার্যকরী হবে। এটি একটি কোড বা মেথড হতে পারে, যা ইভেন্টের ট্রিগার হওয়ার পর কিছু কার্যক্রম সম্পন্ন করবে।
৩.১. হ্যান্ডলার ফাংশন তৈরি করা
// app/components/User.php
namespace app\components;
use yii\base\Component;
use yii\base\Event;
use Yii;
class User extends Component
{
const EVENT_USER_LOGGED_IN = 'userLoggedIn';
public function login($username, $password)
{
// লগইন সফল হলে ইভেন্ট ট্রিগার করা
if ($username === 'admin' && $password === 'password') {
$this->trigger(self::EVENT_USER_LOGGED_IN, new Event());
}
}
public function handleUserLoggedIn(Event $event)
{
// এই মেথডটি ইভেন্ট হ্যান্ডলার হিসেবে কাজ করবে
Yii::info('User has successfully logged in.');
}
}
এখানে, handleUserLoggedIn মেথডটি ইভেন্ট হ্যান্ডলার হিসেবে কাজ করছে, যেটি ইভেন্ট ট্রিগার হওয়ার পর কল হবে।
৩.২. ইভেন্ট হ্যান্ডলার ব্যবহার করা
// app/controllers/SiteController.php
namespace app\controllers;
use Yii;
use app\components\User;
class SiteController extends \yii\web\Controller
{
public function actionIndex()
{
$user = new User();
// ইভেন্ট হ্যান্ডলার যোগ করা
$user->on(User::EVENT_USER_LOGGED_IN, [$user, 'handleUserLoggedIn']);
// লগইন প্রসেস
$user->login('admin', 'password');
}
}
এখানে, User ক্লাসের handleUserLoggedIn মেথডটি ইভেন্ট হ্যান্ডলার হিসেবে ব্যবহার করা হয়েছে। যখন লগইন সফল হবে, তখন এই হ্যান্ডলার ফাংশনটি কল হবে।
৪. ইভেন্টের প্যারামিটার পাঠানো
কখনো কখনো আপনাকে ইভেন্টের সাথে কিছু অতিরিক্ত ডেটা পাঠাতে হতে পারে। Yii ফ্রেমওয়ার্ক ইভেন্টের সাথে প্যারামিটার পাঠানোর সুবিধা দেয়। এটি ইভেন্টের ভেতরে কাস্টম ডেটা পাঠাতে সক্ষম।
৪.১. প্যারামিটার সহ ইভেন্ট ট্রিগার
// app/components/User.php
namespace app\components;
use yii\base\Component;
use yii\base\Event;
class User extends Component
{
const EVENT_USER_LOGGED_IN = 'userLoggedIn';
public function login($username, $password)
{
// লগইন সফল হলে ইভেন্ট ট্রিগার করা এবং অতিরিক্ত প্যারামিটার পাঠানো
if ($username === 'admin' && $password === 'password') {
$this->trigger(self::EVENT_USER_LOGGED_IN, new Event([
'data' => [
'username' => $username,
'timestamp' => time(),
],
]));
}
}
}
এখানে, ইভেন্টের সাথে অতিরিক্ত ডেটা পাঠানো হচ্ছে, যেমন username এবং timestamp।
৪.২. প্যারামিটার গ্রহণ করা
// app/controllers/SiteController.php
namespace app\controllers;
use Yii;
use app\components\User;
class SiteController extends \yii\web\Controller
{
public function actionIndex()
{
$user = new User();
// ইভেন্ট লিসেনার যোগ করা
$user->on(User::EVENT_USER_LOGGED_IN, function ($event) {
Yii::info('User ' . $event->data['username'] . ' logged in at ' . date('Y-m-d H:i:s', $event->data['timestamp']));
});
// লগইন প্রসেস
$user->login('admin', 'password');
}
}
এখানে, $event->data এর মাধ্যমে ইভেন্ট থেকে পাঠানো ডেটা অ্যাক্সেস করা হচ্ছে এবং লগে প্রদর্শিত হচ্ছে।
৫. ইভেন্ট ডিস্ট্রিবিউশন
Yii ফ্রেমওয়ার্কে ইভেন্ট ব্যবস্থাপনার জন্য ইভেন্টগুলো সিস্টেমের ভিন্ন ভিন্ন অংশে পাঠানো (dispatching) এবং গ্রহণ (listening) করা যেতে পারে। একাধিক ইভেন্ট হ্যান্ডলার একই ইভেন্টে যুক্ত করা সম্ভব, এবং প্রতিটি হ্যান্ডলার আলাদাভাবে কাজ করবে।
// app/controllers/SiteController.php
namespace app\controllers;
use Yii;
use app\components\User;
class SiteController extends \yii\web\Controller
{
public function actionIndex()
{
$user = new User();
// একাধিক হ্যান্ডলার যোগ করা
$user->on(User::EVENT_USER_LOGGED_IN, function ($event) {
Yii::info('First handler triggered.');
});
$user->on(User::EVENT_USER_LOGGED_IN, function ($event) {
Yii::info('Second handler triggered.');
});
// লগইন প্রসেস
$user->login('admin', 'password');
}
}
এখানে, দুটি আলাদা হ্যান্ডলার একই ইভেন্টের জন্য যোগ করা হয়েছে, এবং উভয়ই ট্রিগার হবে যখন userLoggedIn ইভেন্ট ঘটে।
সারাংশ
Yii ফ্রেমওয়ার্কে ইভেন্ট লিসেনারস এবং হ্যান্ডলারস ব্যবহারের মাধ্যমে আপনি কোডের কার্যক্রমের ওপর ভালো নিয়ন্ত্রণ রাখতে পারেন এবং ইভেন্ট ট্রিগার হয়ে প্রতিক্রিয়া জানাতে সক্ষম হন। এটি আপনাকে অ্যাপ্লিকেশনকে আরও
ফ্লেক্সিবল এবং কাস্টমাইজেবল করতে সাহায্য করে।