Vývoj dispatchera vo vlastnom MVC frameworku

Pripomeňme si aktuálny obsah súboru index.php:

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

Ako vidíte, náš router zatiaľ vracia objekt triedy Track, ktorý obsahuje názov kontrolera, názov akcie a parametre z adresného riadku. Okrem toho sme v predchádzajúcej lekcii vytvorili rodiča všetkých kontrolerov.

Teraz môžeme zaistiť, aby sa uskutočnilo volanie metódy kontrolera, ktorého údaje sú obsiahnuté v našej premennej $track.

Tým sa bude zaoberať špeciálna trieda Dispatcher. Dispatcher dostane objekt triedy Track a podľa jeho údajov vytvorí objekt zadanej triedy, zavolá metódu tejto triedy a prekladí do tejto metódy parametre.

Pridajme volanie dispatchera do súboru index.php:

index.php<?php
  namespace Core;
  
  error_reporting(E_ALL);
  ini_set('display_errors', 'on');
  
  spl_autoload_register(function($class) {
    // vaša implementácia autoloadingu
  });
  
  $routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
  
  $track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
  
  // Volanie dispatchera:
  $page  = ( new Dispatcher ) -> getPage($track);
?>

Volanie metódy getPage nášho dispatchera zavolá metódu render kontrolera a vráti to, čo vráti volanie tejto metódy. Ako už viete z predchádzajúcej lekcie, metóda render kontrolera vracia objekt triedy Page.

Tu je kostra našej triedy Dispatcher:

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

Použitím mojej kostry implementujte opísanú triedu Dispatcher. Otestujte jej činnosť. Pri ťažkostiach sa pozrite na zdrojový kód v súboroch mnou vytvoreného vzdelávacieho frameworku.