Savo MVC karkaso Dispečerio kūrimas

Prisiminkime dabartinį failo index.php turinį:

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

Kaip matote, kol kas mūsų maršrutizatorius grąžina Track klasės objektą, kuriame yra kontrolerio pavadinimas, veiksmo pavadinimas ir parametrai iš adreso eilutės. Be to, ankstesnėje pamokoje mes sukūrėme visų kontrolerių tėvą.

Dabar mes galime padaryti taip, kad būtų iškviestas kontrolerio metodas, kurio duomenys yra saugomi mūsų kintamajame $track.

Už tai bus atsakinga speciali Dispatcher klasė. Dispečeris gaus Track klasės objektą ir pagal jo duomenis sukurs nurodyto klasės objektą, iškvieš tos klasės metodą, perduodamas į šį metodą parametrus.

Pridėkime dispečerio iškvietimą į failą index.php:

index.php<?php
  namespace Core;
  
  error_reporting(E_ALL);
  ini_set('display_errors', 'on');
  
  spl_autoload_register(function($class) {
    // jūsų autoloadinimo realizacija
  });
  
  $routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
  
  $track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
  
  // Dispečerio iškvietimas:
  $page  = ( new Dispatcher ) -> getPage($track);
?>

Mūsų dispečerio metodo getPage iškvietimas iškvies kontrolerio metodą render ir grąžins tai, ką grąžino šio metodo iškvietimas. Kaip jau žinote iš ankstesnės pamokos, kontrolerio metodas render grąžina Page klasės objektą.

Štai mūsų Dispatcher klasės ruošinys:

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

Naudodamiesi mano ruošiniu, realizuokite aprašytą Dispatcher klasę. Patikrinkite jos veikimą. Jei kyla sunkumų, pažiūrėkite pradinį kodą mano sukurtų mokymo karkaso failuose.