Tworzenie dyspozytora we własnym frameworku MVC

Przypomnijmy sobie obecną zawartość pliku index.php:

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

Jak widzicie, na razie nasz router zwraca obiekt klasy Track, zawierający nazwę kontrolera, nazwę akcji oraz parametry z ciągu adresowego. Ponadto, w poprzedniej lekcji stworzyliśmy rodzica wszystkich kontrolerów.

Teraz możemy sprawić, aby nastąpiło wywołanie metody kontrolera, którego dane zawarte są w naszej zmiennej $track.

Zajmie się tym specjalna klasa Dispatcher. Dyspozytor będzie otrzymywał obiekt klasy Track i na podstawie jego danych tworzył obiekt wskazanej klasy, wywoływał metodę tej klasy, przekazując do tej metody parametry.

Dodajmy wywołanie dyspozytora do pliku index.php:

index.php<?php
  namespace Core;
  
  error_reporting(E_ALL);
  ini_set('display_errors', 'on');
  
  spl_autoload_register(function($class) {
    // twoja implementacja autoloadingu
  });
  
  $routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
  
  $track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
  
  // Wywołanie dyspozytora:
  $page  = ( new Dispatcher ) -> getPage($track);
?>

Wywołanie metody getPage naszego dyspozytora będzie wywoływać metodę render kontrolera i zwracać to, co zwróciło wywołanie tej metody. Jak już wiecie z poprzedniej lekcji, metoda render kontrolera zwraca obiekt klasy Page.

Oto szablon naszej klasy Dispatcher:

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

Korzystając z mojego szablonu zaimplementuj opisaną klasę Dispatcher. Sprawdź jej działanie. W przypadku trudności zajrzyj do kodu źródłowego w plikach wykonanego przeze mnie edukacyjnego frameworka.