আপনার নিজস্ব MVC ফ্রেমওয়ার্কে ডিসপ্যাচার তৈরি

ফাইল index.php-এর বর্তমান বিষয়বস্তু মনে রাখা যাক:

index.php<?php
  namespace Core;
  
  error_reporting(E_ALL);
  ini_set('display_errors', 'on');
  
  spl_autoload_register(function($class) {
    // আপনার অটোলোডিং বাস্তবায়ন
  });
  
  $routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
  
  $track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
?>

আপনি দেখতে পাচ্ছেন, এখন পর্যন্ত আমাদের রাউটার Track ক্লাসের একটি অবজেক্ট রিটার্ন করছে, যাতে রয়েছে কন্ট্রোলারের নাম, অ্যাকশনের নাম এবং ঠিকানা বার থেকে প্যারামিটার। এছাড়াও, আগের পাঠে আমরা সমস্ত কন্ট্রোলারের একটি প্যারেন্ট তৈরি করেছি।

এখন আমরা এমন ব্যবস্থা করতে পারি যাতে কন্ট্রোলারের মেথডটি কল হয়, যার ডেটা আমাদের $track ভেরিয়েবলে রয়েছে।

এটি একটি বিশেষ ক্লাস Dispatcher করবে। ডিসপ্যাচার Track ক্লাসের অবজেক্ট পাবে এবং এর ডেটার ভিত্তিতে উল্লিখিত ক্লাসের একটি অবজেক্ট তৈরি করবে, সেই ক্লাসের মেথডটি কল করবে, এই মেথডে প্যারামিটার পাস করবে।

আসুন index.php ফাইলে ডিসপ্যাচার কল যোগ করি:

index.php<?php
  namespace Core;
  
  error_reporting(E_ALL);
  ini_set('display_errors', 'on');
  
  spl_autoload_register(function($class) {
    // আপনার অটোলোডিং বাস্তবায়ন
  });
  
  $routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
  
  $track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
  
  // ডিসপ্যাচার কল:
  $page  = ( new Dispatcher ) -> getPage($track);
?>

আমাদের ডিসপ্যাচারের getPage মেথডের কল কন্ট্রোলারের render মেথডটি কল করবে এবং এই মেথড কল যা রিটার্ন করে তা রিটার্ন করবে। আপনি আগের পাঠ থেকে ইতিমধ্যেই জানেন, কন্ট্রোলারের render মেথড Page ক্লাসের একটি অবজেক্ট রিটার্ন করে।

এখানে আমাদের Dispatcher ক্লাসের খসড়া:

/core/Dispatcher.php<?php
  namespace Core;
  
  class Dispatcher
  {
    public function getPage(Track $track)
    {
      ...কোড
      return কন্ট্রোলার -> render(প্যারামিটার);
    }
  }
?>
Задание 1

আমার খসড়া ব্যবহার করে বর্ণিত Dispatcher ক্লাসটি বাস্তবায়ন করুন। এর কাজ পরীক্ষা করুন। কোন অসুবিধা হলে আমি তৈরি করা শিক্ষামূলক ফ্রেমওয়ার্কের ফাইলগুলির সোর্স কোড দেখুন।