Распрацоўка дыспетчара ў сваім 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']);
?>

Як вы бачыце, пакуль у нас наш router вяртае аб'ект класа 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. Праверце яго працу. Пры цяжкасцях паглядзіце зыходны код у файлах зробленага мной вучэбнага фрэймворку.