Razvoj dispečera u sopstvenom MVC frejmvorku

Prisetimo se trenutnog sadržaja fajla index.php:

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

Kao što vidite, za sada naš router vraća objekat klase Track, koji sadrži ime kontrolera, ime akcije i parametre iz adresne trake. Osim toga, u prethodnoj lekciji smo napravili roditelja za sve kontrolere.

Sada možemo da postignemo da se izvrši poziv metode kontrolera, čiji se podaci nalaze u našoj promenljivoj $track.

Time će se baviti specijalna klasa Dispatcher. Dispečer će dobijati objekat klase Track i na osnovu njegovih podataka kreirati objekat navedene klase, pozivati metodu te klase, prosleđujući toj metodi parametre.

Hajde da dodamo poziv dispečera u fajl index.php:

index.php<?php
  namespace Core;
  
  error_reporting(E_ALL);
  ini_set('display_errors', 'on');
  
  spl_autoload_register(function($class) {
    // vaša implementacija autoload-a
  });
  
  $routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
  
  $track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
  
  // Poziv dispečera:
  $page  = ( new Dispatcher ) -> getPage($track);
?>

Poziv metode getPage našeg dispečera će pozvati metodu render kontrolera i vratiti ono što je vratio taj poziv. Kao što već znate iz prethodne lekcije, metoda render kontrolera vraća objekat klase Page.

Evo šablona naše klase Dispatcher:

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

Koristeći moj šablon implementirajte opisanu klasu Dispatcher. Proverite njen rad. U slučaju poteškoća pogledajte izvorni kod u fajlovima učinjeg frejmvorka koji sam napravio.