Symfony-তে কাস্টম ইভেন্টস ব্যবহারের মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনে ইভেন্ট ড্রিভেন আর্কিটেকচার (Event-Driven Architecture) প্রয়োগ করতে পারেন। এটি অ্যাপ্লিকেশনের বিভিন্ন অংশের মধ্যে ডিকাপলিং নিশ্চিত করে, যেখানে এক অংশে কোনো পরিবর্তন বা ক্রিয়া ঘটলে অন্য অংশে তা স্বয়ংক্রিয়ভাবে প্রতিক্রিয়া জানায়।
Symfony এর Event Dispatcher সিস্টেম ইভেন্টস এবং লিসেনারসের মাধ্যমে ইভেন্টগুলি পরিচালনা করে। কাস্টম ইভেন্টস ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনে নতুন ইভেন্ট তৈরি করতে পারেন এবং যখনই এই ইভেন্টটি ট্রিগার হবে, সংশ্লিষ্ট লিসেনারস কাজ করবে।
Symfony-তে কাস্টম ইভেন্টস তৈরি করা
Symfony-তে কাস্টম ইভেন্ট তৈরি করার জন্য আপনাকে তিনটি প্রধান পদক্ষেপ অনুসরণ করতে হবে:
- ইভেন্ট ক্লাস তৈরি করা
- ইভেন্ট ডিপ্যাচার (Event Dispatcher) ব্যবহার করা
- ইভেন্ট লিসেনার তৈরি করা
1. ইভেন্ট ক্লাস তৈরি করা
প্রথমে, একটি কাস্টম ইভেন্ট ক্লাস তৈরি করতে হবে যা Symfony\Component\EventDispatcher\Event ক্লাসের উপর ভিত্তি করে তৈরি হবে। এই ক্লাসে ইভেন্টের জন্য প্রয়োজনীয় তথ্য বা ডেটা থাকবে, যা ইভেন্ট ট্রিগার হওয়ার সময় পাস করা হবে।
ইভেন্ট ক্লাস উদাহরণ:
namespace App\Event;
use Symfony\Contracts\EventDispatcher\Event;
class ProductCreatedEvent extends Event
{
public const NAME = 'product.created';
private $product;
public function __construct($product)
{
$this->product = $product;
}
public function getProduct()
{
return $this->product;
}
}
এখানে:
ProductCreatedEventক্লাসটি একটি কাস্টম ইভেন্ট যাEventক্লাস থেকে এক্সটেন্ড করা হয়েছে।$productভেরিয়েবলটি পণ্য সম্পর্কিত ডেটা ধারণ করে, যা ইভেন্টে পাস করা হবে।NAMEকনস্ট্যান্টটি ইভেন্টের নাম সংরক্ষণ করে, যা পরে ইভেন্ট ট্রিগার করার জন্য ব্যবহার করা হবে।
2. ইভেন্ট ডিপ্যাচার ব্যবহার করা
ইভেন্ট dispatch (ট্রিগার) করার জন্য, EventDispatcherInterface ব্যবহার করতে হবে। ইভেন্ট ডিপ্যাচার কাস্টম ইভেন্টটি ট্রিগার করার জন্য ব্যবহৃত হয়।
ইভেন্ট ট্রিগার করার উদাহরণ:
namespace App\Controller;
use App\Event\ProductCreatedEvent;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpFoundation\Response;
class ProductController extends AbstractController
{
public function create(EventDispatcherInterface $eventDispatcher): Response
{
// নতুন পণ্য তৈরি
$product = ['name' => 'Product 1', 'price' => 100];
// কাস্টম ইভেন্ট তৈরি এবং ডিপ্যাচ করা
$event = new ProductCreatedEvent($product);
$eventDispatcher->dispatch($event, ProductCreatedEvent::NAME);
return new Response('Product Created');
}
}
এখানে:
- EventDispatcherInterface Symfony-এর ইভেন্ট ডিপ্যাচ করার জন্য ব্যবহৃত হয়।
- $eventDispatcher->dispatch($event, ProductCreatedEvent::NAME) এই লাইনটি কাস্টম ইভেন্ট ট্রিগার করে এবং ইভেন্টের সাথে সংশ্লিষ্ট ডেটা পাঠায়।
3. ইভেন্ট লিসেনার তৈরি করা
ইভেন্ট লিসেনার এমন একটি ক্লাস যা নির্দিষ্ট ইভেন্টের প্রতিক্রিয়া জানায়। ইভেন্ট লিসেনার শ্রবণ করে, যখন নির্দিষ্ট ইভেন্ট ট্রিগার হয়, তখন এটি ইভেন্টে সংযুক্ত কাস্টম লজিক কার্যকর করে।
ইভেন্ট লিসেনার উদাহরণ:
namespace App\EventListener;
use App\Event\ProductCreatedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class ProductCreatedListener implements EventSubscriberInterface
{
public function onProductCreated(ProductCreatedEvent $event)
{
$product = $event->getProduct();
// এখানে আপনি কাস্টম লজিক যুক্ত করতে পারেন, যেমন ইমেইল পাঠানো
echo "Product Created: " . $product['name'];
}
public static function getSubscribedEvents()
{
return [
ProductCreatedEvent::NAME => 'onProductCreated',
];
}
}
এখানে:
onProductCreated()মেথডটি ইভেন্টের উপর প্রতিক্রিয়া জানায়। যখনProductCreatedEvent::NAMEইভেন্টটি ডিপ্যাচ করা হবে, তখন এই মেথডটি চালু হবে।getSubscribedEvents()মেথডটি ইভেন্টের নাম এবং লিসেনারের মেথড মানচিত্র তৈরি করে।
4. লিসেনার রেজিস্টার করা
Symfony-তে ইভেন্ট লিসেনারটি সঠিকভাবে কাজ করতে services.yaml ফাইলে রেজিস্টার করতে হবে।
services.yaml ফাইলে লিসেনার রেজিস্টার করা:
services:
App\EventListener\ProductCreatedListener:
tags:
- { name: 'kernel.event_subscriber' }
এটি ProductCreatedListener ক্লাসকে Symfony-এর ইভেন্ট সিস্টেমের সাথে যুক্ত করে, যাতে এটি ProductCreatedEvent ইভেন্টের প্রতি সাড়া দিতে পারে।
ইভেন্টে ডেটা প্রেরণ এবং প্রতিক্রিয়া
একবার কাস্টম ইভেন্টটি ডিপ্যাচ করা হলে, সংশ্লিষ্ট ইভেন্ট লিসেনার সেই ইভেন্টটি গ্রহণ করবে এবং প্রেরিত ডেটার উপর ভিত্তি করে প্রয়োজনীয় কার্যকলাপ সম্পাদন করবে। উদাহরণস্বরূপ, পণ্য তৈরি হলে আপনি একটি ইমেইল পাঠানো, লগ তৈরি করা অথবা অন্য অ্যাকশন নিতে পারেন।
ইভেন্ট ডিপ্যাচ এবং লিসেনার কাস্টমাইজেশন
Symfony ইভেন্ট সিস্টেমের শক্তি হলো এর কাস্টমাইজেশন ক্ষমতা। আপনি যেকোনো ইভেন্ট তৈরি করতে পারেন এবং আপনার অ্যাপ্লিকেশনের যেকোনো অংশে এটি ব্যবহার করতে পারেন। এটি ইভেন্ট ড্রিভেন আর্কিটেকচারের মাধ্যমে অ্যাপ্লিকেশনের ভিন্ন ভিন্ন অংশের মধ্যে যোগাযোগ নিশ্চিত করে।
সারাংশ
- Symfony ইভেন্ট ড্রিভেন আর্কিটেকচার ব্যবহার করে আপনি কাস্টম ইভেন্ট তৈরি করতে পারেন যা আপনার অ্যাপ্লিকেশনের কার্যপ্রণালীকে আরও নমনীয় এবং মডুলার করে।
- EventDispatcher কাস্টম ইভেন্ট ট্রিগার করে, এবং EventListener সেই ইভেন্টের প্রতি প্রতিক্রিয়া জানায়।
- Symfony-তে ইভেন্ট ব্যবহারের মাধ্যমে আপনি ডিকাপলিং নিশ্চিত করতে পারেন এবং কোডের রিডেবিলিটি ও মেইনটেনিবিলিটি বাড়াতে পারেন।
Symfony-তে কাস্টম ইভেন্টস ব্যবহারের মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনটিকে আরও ফ্লেক্সিবল, ডাইনামিক এবং স্কেলেবল করতে পারেন।
Read more