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