Разработка на диспетчер в собствен 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. Проверете неговата работа. При затруднения погледнете изходния код във файловете на направения от мен учебен фреймуорк.