Controllers তৈরি করা

Controllers - সিম্ফনি (Symfony) - Web Development

190

Symfony-তে Controllers হল অ্যাপ্লিকেশনের মধ্যে প্রধান লজিক পরিচালনা করার কেন্দ্র। Controller ব্যবহারকারীর অনুরোধ গ্রহণ করে এবং সেগুলির ভিত্তিতে মডেল এবং ভিউ-র মধ্যে সম্পর্ক স্থাপন করে। Controller-এর মাধ্যমে ডেটা প্রসেস করা হয় এবং ব্যবহারকারীর সামনে প্রদর্শনের জন্য ভিউতে পাঠানো হয়।

Controller কী?

Controller একটি ক্লাস যা Symfony\Component\HttpFoundation\Request (ব্যবহারকারীর অনুরোধ) এবং Symfony\Component\HttpFoundation\Response (ব্যবহারকারীর প্রতিক্রিয়া) অবজেক্ট পরিচালনা করে। Controller ব্যবহারকারীর অনুরোধ গ্রহণ করে, ডেটা প্রক্রিয়া করে এবং প্রয়োজনীয় ভিউ রেন্ডার করার জন্য ডেটা পাঠায়।


Symfony-তে Controller তৈরি করার ধাপ

১. Controller ক্লাস তৈরি করা

Symfony-তে Controller তৈরি করতে src/Controller/ ডিরেক্টরিতে একটি নতুন PHP ক্লাস তৈরি করতে হয়। ক্লাসের মধ্যে কমপক্ষে একটি অ্যাকশন (method) থাকতে হবে যা URL রাউটিংয়ের মাধ্যমে অ্যাক্সেস করা যাবে।

উদাহরণ:

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class HomeController extends AbstractController
{
    #[Route('/', name: 'home')]
    public function index(): Response
    {
        return $this->render('home/index.html.twig', [
            'controller_name' => 'HomeController',
        ]);
    }
}

এখানে:

  • HomeController: এটি একটি কন্ট্রোলার ক্লাস।
  • index(): এটি একটি অ্যাকশন মেথড যা ব্যবহারকারীর অনুরোধে প্রতিক্রিয়া জানাবে।
  • #[Route()]: রাউটিং অ্যানোটেশন, যা এই অ্যাকশনটির সাথে URL সম্পর্ক স্থাপন করে।

Route (রাউটিং) ব্যবহার করা

Symfony-তে URL রাউটিং ব্যবহৃত হয় ব্যবহারকারীর অনুরোধকে Controller-এর অ্যাকশনের সাথে যুক্ত করতে। রাউটিং দুইভাবে করা যায়:

  1. অ্যানোটেশন ব্যবহার করে (যেমন উপরের উদাহরণে দেখা গেছে)
  2. YAML বা XML ফাইল ব্যবহার করে

অ্যানোটেশন রাউটিং উদাহরণ:

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class ProductController extends AbstractController
{
    #[Route('/product/{id}', name: 'product_show')]
    public function show(int $id): Response
    {
        // এখানে ডেটাবেস থেকে পণ্য তথ্য পাওয়া যাবে (যেমন: $product = findProductById($id))
        return $this->render('product/show.html.twig', [
            'product_id' => $id,
        ]);
    }
}

YAML রাউটিং উদাহরণ (config/routes.yaml):

product_show:
  path: /product/{id}
  controller: App\Controller\ProductController::show

এখানে /product/{id} URL পাথ দিয়ে ProductController এর show() অ্যাকশন কল হবে এবং {id} প্যারামিটারটি স্বয়ংক্রিয়ভাবে অ্যাকশনে পাঠানো হবে।


Controller থেকে ভিউ রেন্ডার করা

Symfony-তে, আপনি Twig টেমপ্লেট ইঞ্জিন ব্যবহার করে ভিউ রেন্ডার করতে পারেন। render() মেথডটি ভিউ ফাইল রেন্ডার করার জন্য ব্যবহার করা হয়।

ভিউ রেন্ডার করার উদাহরণ:

public function index(): Response
{
    return $this->render('home/index.html.twig', [
        'controller_name' => 'HomeController',
    ]);
}

এখানে home/index.html.twig ফাইলটি রেন্ডার হবে এবং অ্যাকশনের ডেটা (যেমন controller_name) সেই ভিউতে পাঠানো হবে।


Controller থেকে রিডিরেকশন

কখনো কখনো ব্যবহারকারীর একটি নির্দিষ্ট URL-এ পুনঃনির্দেশ করা (Redirect) প্রয়োজন হয়। Symfony redirect() মেথড ব্যবহার করে রিডিরেকশন করতে দেয়।

রিডিরেকশন উদাহরণ:

public function redirectToHome(): Response
{
    return $this->redirectToRoute('home');
}

এখানে ব্যবহারকারী redirectToHome() অ্যাকশন কল করলে তাকে / পাথের (যা home রাউটিংয়ের মাধ্যমে মিলে) দিকে রিডিরেক্ট করা হবে।


Controller থেকে JSON রেসপন্স

Symfony-তে আপনি JSON ডেটা ব্যবহারকারীর কাছে পাঠাতে পারেন। এটি API ডেভেলপমেন্টে বিশেষভাবে গুরুত্বপূর্ণ।

JSON রেসপন্স উদাহরণ:

use Symfony\Component\HttpFoundation\JsonResponse;

public function apiResponse(): JsonResponse
{
    return new JsonResponse([
        'status' => 'success',
        'message' => 'Data retrieved successfully!',
    ]);
}

এখানে JsonResponse ব্যবহার করে JSON আউটপুট পাঠানো হয়।


Controller-এ Dependency Injection (DI) ব্যবহার

Symfony-তে Controller-এর মধ্যে Dependency Injection (DI) ব্যবহার করে বিভিন্ন সার্ভিস ইনজেক্ট করা যায়। Symfony স্বয়ংক্রিয়ভাবে প্রয়োজনীয় সার্ভিসগুলো কন্ট্রোলারে ইনজেক্ট করে।

DI উদাহরণ:

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use App\Service\MyService;

class HomeController extends AbstractController
{
    private $myService;

    public function __construct(MyService $myService)
    {
        $this->myService = $myService;
    }

    public function index(): Response
    {
        $message = $this->myService->getMessage();
        return $this->render('home/index.html.twig', [
            'message' => $message,
        ]);
    }
}

এখানে MyService সার্ভিস ইনজেক্ট করা হয়েছে এবং এটি কন্ট্রোলারের মধ্যে ব্যবহৃত হয়েছে।


Controller-এ Form Handling

Symfony ফ্রেমওয়ার্ক ফর্ম হ্যান্ডলিংয়ের জন্য একটি শক্তিশালী টুল সরবরাহ করে। ফর্ম তৈরি এবং প্রসেস করতে Form কম্পোনেন্ট ব্যবহার করা হয়।

ফর্ম উদাহরণ:

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;

public function createForm(Request $request): Response
{
    $form = $this->createFormBuilder()
        ->add('name', TextType::class)
        ->add('submit', SubmitType::class, ['label' => 'Submit'])
        ->getForm();

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $data = $form->getData();
        // ডেটা প্রসেস করুন
    }

    return $this->render('form/create.html.twig', [
        'form' => $form->createView(),
    ]);
}

এখানে একটি ফর্ম তৈরি করা হয়েছে এবং সেটি create.html.twig টেমপ্লেটে রেন্ডার করা হয়েছে।


সারাংশ

Symfony-তে Controllers ব্যবহারকারীর অনুরোধ গ্রহণ করে, ডেটা প্রক্রিয়া করে এবং সেই ডেটা ভিউ-তে পাঠানোর জন্য ব্যবহৃত হয়। কন্ট্রোলারের মাধ্যমে আপনি রাউটিং, ভিউ রেন্ডারিং, ফর্ম হ্যান্ডলিং, রিডিরেকশন, JSON রেসপন্স ইত্যাদি কাজ করতে পারেন। এটি Symfony অ্যাপ্লিকেশন ডেভেলপমেন্টের কেন্দ্রীয় অংশ, যেখানে সমস্ত লজিক সংগঠিত থাকে।

Content added By
Promotion

Are you sure to start over?

Loading...