Vývoj dispatcheru ve vlastním MVC frameworku

Připomeňme si aktuální obsah souboru index.php:

index.php<?php
  namespace Core;
  
  error_reporting(E_ALL);
  ini_set('display_errors', 'on');
  
  spl_autoload_register(function($class) {
    // vaše implementace automatického načítání
  });
  
  $routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
  
  $track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
?>

Jak vidíte, zatím nám náš router vrací objekt třídy Track, obsahující název kontroleru, název akce a parametry z adresního řádku. Kromě toho, v předchozí lekci jsme vytvořili rodiče všech kontrolerů.

Nyní můžeme zařídit, aby došlo k volání metody kontroleru, jehož data jsou obsažena v naší proměnné $track.

Tím se bude zabývat speciální třída Dispatcher. Dispatcher bude získávat objekt třídy Track a podle jeho dat vytvářet objekt uvedené třídy, volat metodu této třídy a předávat do této metody parametry.

Přidejme volání dispatcheru do souboru index.php:

index.php<?php
  namespace Core;
  
  error_reporting(E_ALL);
  ini_set('display_errors', 'on');
  
  spl_autoload_register(function($class) {
    // vaše implementace automatického načítání
  });
  
  $routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
  
  $track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
  
  // Volání dispatcheru:
  $page  = ( new Dispatcher ) -> getPage($track);
?>

Volání metody getPage našeho dispatcheru bude volat metodu render kontroleru a vracet to, co vrátilo volání této metody. Jak již víte z předchozí lekce, metoda render kontroleru vrací objekt třídy Page.

Zde je příprava naší třídy Dispatcher:

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

Pomocí mé přípravy implementujte popsanou třídu Dispatcher. Ověřte její fungování. Při obtížích se podívejte na zdrojový kód v souborech mnou vytvořeného výukového frameworku.