Zend Framework (বর্তমানে Laminas) এ ইভেন্ট ড্রিভেন আর্কিটেকচার ব্যবহৃত হয়, যা কোডের কার্যকলাপগুলোকে আলাদা আলাদা ইভেন্টের মাধ্যমে পরিচালনা করতে সাহায্য করে। এতে একাধিক শ্রেণী বা কোডের অংশগুলি একে অপরের সাথে যোগাযোগ করতে পারে ইভেন্টের মাধ্যমে, ফলে সিস্টেমের মডুলারিটি বৃদ্ধি পায় এবং রক্ষণাবেক্ষণ সহজ হয়।
Zend Framework এ কাস্টম ইভেন্ট তৈরি এবং ট্রিগার করার প্রক্রিয়া অত্যন্ত সহজ এবং শক্তিশালী, যা আপনাকে আপনার অ্যাপ্লিকেশন বা মডিউলে নির্দিষ্ট কাজ সম্পাদন করতে নির্দিষ্ট ইভেন্ট তৈরি করতে সাহায্য করে।
কাস্টম ইভেন্ট তৈরি এবং ট্রিগার করার প্রক্রিয়া
Zend Framework (Laminas) এ কাস্টম ইভেন্ট তৈরি এবং ট্রিগার করার জন্য আপনি মূলত Zend\EventManager কম্পোনেন্ট ব্যবহার করবেন। এই কম্পোনেন্টটি ইভেন্ট সাবস্ক্রাইবার এবং ইভেন্ট পাবলিশারদের মধ্যে সম্পর্ক স্থাপন করে।
১. Zend\EventManager ব্যবহার করা
Zend\EventManager হল একটি শক্তিশালী টুল, যা ইভেন্টের মাধ্যমে ক্লাস বা মডিউলগুলোর মধ্যে যোগাযোগ সক্ষম করে। এটি এমন একটি সিস্টেম, যা ইভেন্টের ট্রিগার এবং সাবস্ক্রিপশন কার্যক্রম পরিচালনা করে।
২. কাস্টম ইভেন্ট তৈরি করা
প্রথমে, একটি কাস্টম ইভেন্ট তৈরি করার জন্য আপনাকে ইভেন্ট ম্যানেজার ইনস্ট্যান্স তৈরি করতে হবে। এই ম্যানেজারটি ইভেন্ট ট্রিগার করার এবং ইভেন্টে রেজিস্টার করা হ্যান্ডলারগুলো পরিচালনা করতে ব্যবহৃত হবে।
কাস্টম ইভেন্টের উদাহরণ:
কাস্টম ইভেন্ট ক্লাস তৈরি করা:
আপনাকে কাস্টম ইভেন্টের জন্য একটি ক্লাস তৈরি করতে হবে। সাধারণত, এটি
Zend\EventManager\Eventক্লাস থেকে এক্সটেন্ড করা হয়।
namespace Application\Event;
use Laminas\EventManager\Event;
class ProductEvent extends Event
{
const EVENT_PRODUCT_CREATED = 'product.created';
const EVENT_PRODUCT_UPDATED = 'product.updated';
protected $productData;
public function getProductData()
{
return $this->productData;
}
public function setProductData($productData)
{
$this->productData = $productData;
}
}
এখানে, ProductEvent ক্লাসটি একটি কাস্টম ইভেন্ট ক্লাস যা product.created এবং product.updated নামক দুটি কাস্টম ইভেন্ট হ্যান্ডলার ডিফাইন করেছে। ইভেন্টের মাধ্যমে যে ডাটা পাস করা হবে তা হল productData।
ইভেন্ট ম্যানেজার কনফিগারেশন:
এখন, আপনার মডিউলে ইভেন্ট ম্যানেজার কনফিগার করে এই কাস্টম ইভেন্টগুলো ট্রিগার এবং সাবস্ক্রাইব করতে হবে।
namespace Application;
use Laminas\EventManager\EventManager;
use Application\Event\ProductEvent;
class ProductService
{
protected $eventManager;
public function __construct(EventManager $eventManager)
{
$this->eventManager = $eventManager;
}
public function createProduct($productData)
{
// কিছু প্রোডাক্ট ক্রিয়েশন লজিক
$productEvent = new ProductEvent();
$productEvent->setProductData($productData);
// product.created ইভেন্ট ট্রিগার করা
$this->eventManager->trigger(ProductEvent::EVENT_PRODUCT_CREATED, $this, $productEvent);
return "Product created successfully!";
}
}
এখানে ProductService ক্লাসে একটি createProduct মেথড রয়েছে, যা প্রোডাক্ট তৈরি করে এবং তারপর কাস্টম ইভেন্ট product.created ট্রিগার করে।
৩. ইভেন্ট সাবস্ক্রাইবার তৈরি করা
এখন, আপনাকে ইভেন্ট হ্যান্ডলার (সাবস্ক্রাইবার) তৈরি করতে হবে যা এই কাস্টম ইভেন্টে রেসপন্স করবে।
ইভেন্ট সাবস্ক্রাইবারের উদাহরণ:
namespace Application\EventListener;
use Application\Event\ProductEvent;
class ProductListener
{
public function onProductCreated(ProductEvent $event)
{
// ইভেন্ট ট্রিগার হওয়ার পর কাজ করবেন
$productData = $event->getProductData();
echo "Product Created with Data: " . json_encode($productData);
}
public function onProductUpdated(ProductEvent $event)
{
// প্রোডাক্ট আপডেট হলে কিছু কার্যকলাপ করতে পারেন
echo "Product Updated!";
}
}
এখানে, ProductListener ক্লাসটি onProductCreated এবং onProductUpdated নামক দুইটি মেথড সংজ্ঞায়িত করেছে। এই মেথডগুলো যখন কাস্টম ইভেন্ট ট্রিগার হবে, তখন কার্যকর হবে।
৪. ইভেন্ট ম্যানেজারে সাবস্ক্রাইবার রেজিস্টার করা
এখন, আপনাকে এই ইভেন্ট সাবস্ক্রাইবারকে ইভেন্ট ম্যানেজারের সঙ্গে রেজিস্টার করতে হবে, যাতে ইভেন্ট ট্রিগার হওয়ার পর সাবস্ক্রাইবারটি ইভেন্ট হ্যান্ডল করতে পারে।
namespace Application;
use Laminas\EventManager\EventManager;
use Application\EventListener\ProductListener;
use Application\Event\ProductEvent;
class Module
{
public function onBootstrap($e)
{
$eventManager = $e->getApplication()->getEventManager();
// ProductListener সাবস্ক্রাইবার রেজিস্টার করা
$productListener = new ProductListener();
$eventManager->attach(ProductEvent::EVENT_PRODUCT_CREATED, [$productListener, 'onProductCreated']);
$eventManager->attach(ProductEvent::EVENT_PRODUCT_UPDATED, [$productListener, 'onProductUpdated']);
}
}
এখানে, onBootstrap মেথডে ProductListener সাবস্ক্রাইবারটি ProductEvent ইভেন্টের জন্য রেজিস্টার করা হয়েছে। এর ফলে, যখন product.created ইভেন্ট ট্রিগার হবে, তখন onProductCreated মেথড কল হবে।
৫. কাস্টম ইভেন্ট ট্রিগার করা
এখন, যখন আপনি ProductService ক্লাসের createProduct মেথডটি কল করবেন, তখন কাস্টম ইভেন্টটি ট্রিগার হবে এবং ইভেন্ট সাবস্ক্রাইবার (যেমন ProductListener) এর মেথড কার্যকর হবে।
$productService = new ProductService($eventManager);
$productService->createProduct(['name' => 'Laptop', 'price' => 1000]);
এখানে, createProduct মেথডটি কল করার সাথে সাথে product.created ইভেন্ট ট্রিগার হবে এবং ProductListener::onProductCreated মেথডটি চালু হবে।
সারাংশ
Zend Framework (Laminas) এ কাস্টম ইভেন্ট তৈরি এবং ট্রিগার করা একটি শক্তিশালী পদ্ধতি, যা কোডের কার্যকলাপগুলোর মধ্যে মডুলার এবং ডিকুপলড সম্পর্ক তৈরি করতে সাহায্য করে। Zend\EventManager কম্পোনেন্টের মাধ্যমে আপনি কাস্টম ইভেন্ট তৈরি করে সেটি ট্রিগার এবং হ্যান্ডল করতে পারেন। এটি আপনার অ্যাপ্লিকেশনের রক্ষণাবেক্ষণ সহজ করে এবং ভবিষ্যতে কোডের উন্নয়ন এবং পরিস্কার রাখতে সহায়তা করে।
Read more