O'z MVC freymvorkingizda Dispetcherni ishlab chiqish

index.php faylining hozirgi tarkibini eslaymiz:

index.php<?php
  namespace Core;
  
  error_reporting(E_ALL);
  ini_set('display_errors', 'on');
  
  spl_autoload_register(function($class) {
    // sizning avtoyuklash realizatsiyangiz
  });
  
  $routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
  
  $track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
?>

Ko'rib turganingizdek, hozircha routerimiz Track klassining ob'ektini qaytarmoqda, unda kontroller nomi, amal nomi va manzil qatoridagi parametrlar mavjud. Bundan tashqari, oldingi darsda biz barcha kontrollerlarning ota-sinasini yasadik.

Endi biz $track o'zgaruvchimizda mavjud bo'lgan ma'lumotlar asosida kontroller metodini chaqirilishini ta'minlashimiz mumkin.

Buning uchun maxsus Dispatcher klassi mas'ul bo'ladi. Dispetcher Track klassining ob'ektini oladi va uning ma'lumotlari asosida ko'rsatilgan klassning ob'ektini yaratadi, shu klassning metodini chaqiradi, ushbu metodga parametrlarni uzatadi.

Keling, dispetcher chaqiruvini index.php fayliga qo'shamiz:

index.php<?php
  namespace Core;
  
  error_reporting(E_ALL);
  ini_set('display_errors', 'on');
  
  spl_autoload_register(function($class) {
    // sizning avtoyuklash realizatsiyangiz
  });
  
  $routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
  
  $track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
  
  // Dispetcherni chaqirish:
  $page  = ( new Dispatcher ) -> getPage($track);
?>

Bizning dispetcherimizning getPage metodini chaqirish render kontroller metodini chaqiradi va ushbu metod chaqiruvi qaytgan narsani qaytaradi. Siz oldingi darsdan bilganingizdek, render kontroller metodi Page klassining ob'ektini qaytaradi.

Mana bizning Dispatcher klassimizning tayyorgarlik ko'rinishi:

/core/Dispatcher.php<?php
  namespace Core;
  
  class Dispatcher
  {
    public function getPage(Track $track)
    {
      ...kod
      return kontroller -> render(parametrlar);
    }
  }
?>
Задание 1

Mening tayyorgarlik ko'rinishimdan foydalanib tasvirlangan Dispatcher klassini realizatsiya qiling. Uning ishlashini tekshiring. Qiyinchiliklar yuzaga kelsa, mening tayyorlagan o'quv freymvorkim fayllaridagi boshlang'ich kodni ko'rib chiqing.