Phalcon ফ্রেমওয়ার্কে Custom Events এবং Listeners ব্যবহার করে আপনি অ্যাপ্লিকেশনের মধ্যে বিভিন্ন ইভেন্ট সিস্টেম তৈরি করতে পারেন। Custom Events এর মাধ্যমে আপনি নিজের ইভেন্ট সিস্টেম তৈরি করতে পারেন এবং সেই ইভেন্টের জন্য Listener যুক্ত করে বিভিন্ন কার্যক্রম সম্পাদন করতে পারেন। এই ইভেন্ট-ভিত্তিক আর্কিটেকচার অ্যাপ্লিকেশনকে আরো স্কেলেবল এবং মডুলার করে তোলে।
এই গাইডে, আমরা দেখব কিভাবে Phalcon এ Custom Event তৈরি করা যায় এবং Listener যুক্ত করে ইভেন্ট হ্যান্ডলিং করা যায়।
Custom Event তৈরি করা
Phalcon এ Custom Event তৈরি করার জন্য আপনাকে EventsManager ব্যবহার করতে হবে। EventsManager হল একটি সিস্টেম যা ইভেন্টগুলি পরিচালনা করে এবং তার সাথে সংশ্লিষ্ট Listener গুলিকে হ্যান্ডল করে।
ধরা যাক, আমরা একটি কাস্টম ইভেন্ট তৈরি করতে যাচ্ছি যেটি ব্যবহারকারীর লগইন হলে ঘটবে এবং সেই ইভেন্টে একটি Listener যুক্ত করা হবে।
1. Event Manager কনফিগারেশন
প্রথমে, আপনাকে একটি EventsManager কনফিগার করতে হবে।
$di->setShared('eventsManager', function() {
return new Phalcon\Events\Manager();
});
এটি আমাদের EventsManager কে ডাইরেক্টরি কন্টেইনারে রেজিস্টার করে, যাতে অ্যাপ্লিকেশনের যেকোনো অংশে এটি সহজে অ্যাক্সেস করা যায়।
2. Custom Event Trigger করা
এখন, আমরা একটি কাস্টম ইভেন্ট তৈরি করব এবং সেই ইভেন্টটি কোনো কন্ট্রোলার অ্যাকশনে ট্রিগার করব।
// UserController.php
use Phalcon\Events\Event;
class UserController extends Controller
{
public function loginAction()
{
// ইভেন্ট ট্রিগার করা
$this->di->get('eventsManager')->fire('user:login', $this);
echo "User logged in!";
}
}
এখানে, fire() মেথডের মাধ্যমে 'user:login' নামে একটি কাস্টম ইভেন্ট ট্রিগার করা হচ্ছে।
Listener তৈরি করা
এখন, আমাদের একটি Listener তৈরি করতে হবে যেটি ওই কাস্টম ইভেন্টটি হ্যান্ডল করবে। Listener হচ্ছে একটি ক্লাস যা নির্দিষ্ট ইভেন্টের জন্য কোড এক্সিকিউট করবে।
1. Listener ক্লাস তৈরি করা
// LoginListener.php
use Phalcon\Events\Event;
class LoginListener
{
public function beforeLogin(Event $event, $component)
{
echo "User login event triggered!";
}
}
এখানে, beforeLogin মেথডটি user:login ইভেন্টের জন্য Listener হিসেবে কাজ করবে এবং সেই ইভেন্ট ট্রিগার হলে এটি একটি মেসেজ প্রিন্ট করবে।
2. Listener ইভেন্টের সাথে যুক্ত করা
Listener টি ইভেন্টের সাথে যুক্ত করতে হবে। এটি EventsManager এর মাধ্যমে করা হয়।
// Setting up the listener
$eventsManager = $this->di->get('eventsManager');
$listener = new LoginListener();
$eventsManager->attach('user:login', $listener, 1);
এখানে, attach() মেথডের মাধ্যমে আমরা 'user:login' ইভেন্টটি LoginListener ক্লাসের beforeLogin মেথডের সাথে যুক্ত করেছি।
3. Multiple Listeners ব্যবহার করা
Phalcon এ আপনি একাধিক Listener যুক্ত করতে পারেন এবং সব Listener নির্দিষ্ট ইভেন্ট ট্রিগার হলে চালু হবে। যদি আপনি একাধিক Listener ব্যবহার করতে চান, তবে তাদেরকে ইভেন্টের সাথে যুক্ত করা যাবে।
// Another listener
class AnotherListener
{
public function afterLogin(Event $event, $component)
{
echo "After login event handled!";
}
}
// Attaching multiple listeners
$eventsManager->attach('user:login', new LoginListener(), 1);
$eventsManager->attach('user:login', new AnotherListener(), 2);
এখানে, দুটি Listener (LoginListener এবং AnotherListener) user:login ইভেন্টের জন্য যুক্ত করা হয়েছে। এই ইভেন্টটি ট্রিগার হলে প্রথম Listener এবং তারপর দ্বিতীয় Listener কল হবে।
Event Priority ব্যবহার করা
Phalcon এ আপনি Listener গুলির জন্য priority সেট করতে পারেন। Priority নির্ধারণ করে কোন Listener প্রথমে এক্সিকিউট হবে। Priority এর মাধ্যমে আপনি Listener গুলির অর্ডার কন্ট্রোল করতে পারবেন।
$eventsManager->attach('user:login', new LoginListener(), 1); // High priority
$eventsManager->attach('user:login', new AnotherListener(), 2); // Low priority
এখানে, LoginListener এর priority 1, এবং AnotherListener এর priority 2, যার মানে প্রথমে LoginListener এক্সিকিউট হবে।
4. Event Trigger এর পর Action
ইভেন্ট ট্রিগার হওয়ার পর আপনি চাইলে কোনো নির্দিষ্ট কাজ সম্পাদন করতে পারেন, যেমন ডাটাবেসে লগ করা, ইমেইল পাঠানো, ইত্যাদি।
// LoginListener.php
public function beforeLogin(Event $event, $component)
{
// Log or send email
file_put_contents('login_event_log.txt', "Login event triggered at " . date('Y-m-d H:i:s') . "\n", FILE_APPEND);
}
এখানে, beforeLogin মেথডের মধ্যে একটি লগ ফাইল তৈরি করা হয়েছে, যেখানে লগইন ইভেন্টটি ট্রিগার হওয়ার সময়ের ডেটা রেকর্ড করা হবে।
সারাংশ
Phalcon ফ্রেমওয়ার্কে Custom Events এবং Listeners ব্যবহারের মাধ্যমে আপনি খুবই মডুলার এবং স্কেলেবল ইভেন্ট-ভিত্তিক সিস্টেম তৈরি করতে পারেন। আপনি কাস্টম ইভেন্ট তৈরি করে এবং Listener এর মাধ্যমে সেই ইভেন্টের জন্য কাজ সম্পাদন করতে পারেন, যা অ্যাপ্লিকেশনের কার্যকারিতা এবং রক্ষণাবেক্ষণ আরও সহজ করে তোলে। EventsManager ব্যবহার করে ইভেন্ট ট্রিগার এবং Listener যুক্ত করা সম্ভব, এবং আপনি ইভেন্টের সাথে একাধিক Listener এবং priority কন্ট্রোল ব্যবহার করতে পারেন।
Read more