Symfony এর বিল্ট-ইন ইভেন্টস

ইভেন্ট ডিসপ্যাচার এবং লিসেনারস - সিম্ফনি (Symfony) - Web Development

301

Symfony একটি শক্তিশালী Event Dispatcher সিস্টেম সরবরাহ করে, যা ডেভেলপারদের অ্যাপ্লিকেশন এভেন্ট ভিত্তিক কার্যপ্রণালী পরিচালনা করতে সক্ষম করে। Symfony-এর বিল্ট-ইন ইভেন্টস এর মাধ্যমে, আপনি বিশেষ ইভেন্টগুলি শোনার এবং সেই ইভেন্টগুলির জন্য প্রতিক্রিয়া জানাতে পারেন, যা অ্যাপ্লিকেশনের আচরণ পরিবর্তন করতে বা কাস্টম লজিক প্রয়োগ করতে সহায়ক।

ইভেন্ট ড্রাইভেন আর্কিটেকচার

Symfony ইভেন্ট ড্রাইভেন আর্কিটেকচার ব্যবহার করে, যার মাধ্যমে অ্যাপ্লিকেশনের বিভিন্ন অংশ একটি নির্দিষ্ট ইভেন্ট এর জন্য অপেক্ষা করে এবং সেই ইভেন্টের ভিত্তিতে কার্যকরী পদক্ষেপ নেয়।

Symfony-এ ইভেন্ট কীভাবে কাজ করে?

  1. ইভেন্ট:
    • ইভেন্ট হলো একটি ক্লাস, যা EventDispatcher এর মাধ্যমে ডিস্প্যাচ (পাঠানো) হয়। এটি অ্যাপ্লিকেশনের একটি নির্দিষ্ট ঘটনার প্রতিনিধিত্ব করে।
  2. লিসেনার:
    • ইভেন্ট শুনে (listen) এবং ইভেন্ট ট্রিগার হলে প্রতিক্রিয়া জানানো হয়। Symfony-তে লিসেনার হলো সেই কোড যা একটি নির্দিষ্ট ইভেন্ট শোনে এবং তার জন্য একটি কার্যকরী পদক্ষেপ নেয়।
  3. ডিস্প্যাচ:
    • ইভেন্টটি ডিপেন্ডেন্ট ক্লাসের মাধ্যমে ডিস্প্যাচ করা হয়, যাতে লিসেনার বা সাবস্ক্রাইবার সেই ইভেন্টটি গ্রহণ করতে পারে।

Symfony-এ বিল্ট-ইন ইভেন্ট উদাহরণ

Symfony বিভিন্ন বিল্ট-ইন ইভেন্ট সরবরাহ করে, যা আপনি EventListener বা EventSubscriber ব্যবহার করে শুনতে পারেন।

১. Kernel Request ইভেন্ট

  • kernel.request ইভেন্টটি যখন HTTP অনুরোধ আসে, তখন ট্রিগার হয়। এটি অ্যাপ্লিকেশনের আর্কিটেকচারের প্রথম অংশ এবং ইনপুট ডেটা প্রসেস করার জন্য ব্যবহার করা হয়।

উদাহরণ (Kernel Request Listener):

namespace App\EventListener;

use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class RequestListener implements EventSubscriberInterface
{
    public function onKernelRequest(RequestEvent $event)
    {
        // এখানে আপনার কাস্টম লজিক যোগ করুন
        // উদাহরণস্বরূপ, কাস্টম হেডার চেক করা
        $request = $event->getRequest();
        if (!$request->headers->has('X-Custom-Header')) {
            // কাস্টম হেডার না থাকলে একটি কাস্টম 400 এর রেসপন্স তৈরি করুন
            $response = new Response('Custom header is missing.', 400);
            $event->setResponse($response);
        }
    }

    public static function getSubscribedEvents()
    {
        // যখন kernel.request ইভেন্ট হয়, তখন আমাদের কাস্টম লজিক চলে
        return [
            KernelEvents::REQUEST => 'onKernelRequest',
        ];
    }
}
  • ব্যাখ্যা:
    • এখানে onKernelRequest মেথডটি kernel.request ইভেন্টটি শোনে।
    • যদি X-Custom-Header নামের হেডার অনুপস্থিত থাকে, তবে একটি কাস্টম 400 রেসপন্স তৈরি হয় এবং সেটি ফেরত দেওয়া হয়।

২. Kernel Controller ইভেন্ট

  • kernel.controller ইভেন্টটি যখন Symfony কন্ট্রোলার কল করা হয়, তখন ট্রিগার হয়। আপনি কন্ট্রোলার লজিকের আগে কিছু কার্যকরী পদক্ষেপ নিতে পারেন।

উদাহরণ (Controller Listener):

namespace App\EventListener;

use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class ControllerListener implements EventSubscriberInterface
{
    public function onKernelController(ControllerEvent $event)
    {
        // Controller চেক করতে পারেন
        $controller = $event->getController();
        if (is_array($controller)) {
            // Controller method অনুযায়ী custom logic প্রয়োগ করা
            $controller[0]->setCustomHeader('Value');
        }
    }

    public static function getSubscribedEvents()
    {
        return [
            KernelEvents::CONTROLLER => 'onKernelController',
        ];
    }
}
  • ব্যাখ্যা:
    • এখানে, onKernelController মেথডটি kernel.controller ইভেন্টটি শোনে।
    • কন্ট্রোলার কল হওয়ার আগে আপনি কাস্টম লজিক প্রয়োগ করতে পারেন। উদাহরণস্বরূপ, কন্ট্রোলার মেথডের জন্য কাস্টম হেডার সেট করা।

৩. Response ইভেন্ট

  • kernel.response ইভেন্টটি যখন Symfony একটি HTTP রেসপন্স তৈরি করে, তখন এটি ট্রিগার হয়। এটি রেসপন্সের আগে কাস্টম ম্যানিপুলেশন করতে সাহায্য করে।

উদাহরণ (Response Listener):

namespace App\EventListener;

use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class ResponseListener implements EventSubscriberInterface
{
    public function onKernelResponse(ResponseEvent $event)
    {
        $response = $event->getResponse();
        // কাস্টম হেডার যোগ করা
        $response->headers->set('X-Processed-Time', (new \DateTime())->format('Y-m-d H:i:s'));
    }

    public static function getSubscribedEvents()
    {
        return [
            KernelEvents::RESPONSE => 'onKernelResponse',
        ];
    }
}
  • ব্যাখ্যা:
    • onKernelResponse মেথডটি kernel.response ইভেন্টটি শোনে।
    • রেসপন্স তৈরি হওয়ার পরে কাস্টম হেডার যোগ করা হয়। উদাহরণস্বরূপ, X-Processed-Time হেডার যুক্ত করা হয়েছে।

৪. Exception ইভেন্ট

  • kernel.exception ইভেন্টটি যখন কোনো এক্সসেপশন ঘটে, তখন ট্রিগার হয়। এটি অ্যাপ্লিকেশনে এক্সসেপশন হ্যান্ডলিং এর জন্য ব্যবহৃত হয়।

উদাহরণ (Exception Listener):

namespace App\EventListener;

use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class ExceptionListener implements EventSubscriberInterface
{
    public function onKernelException(ExceptionEvent $event)
    {
        $exception = $event->getThrowable();
        // কাস্টম এক্সসেপশন হ্যান্ডলিং
        if ($exception instanceof \App\Exception\CustomException) {
            $response = new Response('Custom error occurred', 500);
            $event->setResponse($response);
        }
    }

    public static function getSubscribedEvents()
    {
        return [
            KernelEvents::EXCEPTION => 'onKernelException',
        ];
    }
}
  • ব্যাখ্যা:
    • onKernelException মেথডটি kernel.exception ইভেন্টটি শোনে।
    • একটি কাস্টম এক্সসেপশন ঘটলে, সিস্টেমের ডিফল্ট এক্সসেপশন হ্যান্ডলিং পরিবর্তন করে কাস্টম রেসপন্স ফেরত দেয়।

Symfony-তে ইভেন্টগুলো পরিচালনা করা

  1. Event Listener: ইভেন্ট শোনার জন্য আপনি EventListener ক্লাস তৈরি করতে পারেন, যা একটি নির্দিষ্ট ইভেন্টের জন্য লিসেনার মেথডকে কনফিগার করে।
  2. Event Subscriber: ইভেন্ট সাবস্ক্রাইবার Symfony-এ আরও উন্নত ফিচার প্রদান করে, কারণ এটি একাধিক ইভেন্টের জন্য শোনার ক্ষমতা দেয়। এইটি getSubscribedEvents মেথডের মাধ্যমে কাজ করে।

সারাংশ

Symfony-তে বিল্ট-ইন ইভেন্টসEvent Dispatcher সিস্টেম আপনাকে ইভেন্ট-ভিত্তিক প্রোগ্রামিং পরিচালনা করতে সাহায্য করে। এটি বিভিন্ন অ্যাপ্লিকেশন স্তরে কার্যপ্রণালী পরিচালনা, এক্সসেপশন হ্যান্ডলিং, এবং কাস্টম লজিক প্রয়োগের জন্য খুবই উপযোগী। Symfony-তে ইভেন্টগুলি ব্যবহার করে, আপনি অ্যাপ্লিকেশনটির আচরণ সহজেই কাস্টমাইজ করতে এবং এক্সটেন্ড করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...