Développement du répartiteur dans son propre framework MVC

Rappelons le contenu actuel du fichier index.php :

index.php<?php
  namespace Core;
  
  error_reporting(E_ALL);
  ini_set('display_errors', 'on');
  
  spl_autoload_register(function($class) {
    // votre implémentation de l'autochargement
  });
  
  $routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
  
  $track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
?>

Comme vous pouvez le voir, pour l'instant, notre routeur retourne un objet de la classe Track, contenant le nom du contrôleur, le nom de l'action et les paramètres de la ligne d'adresse. De plus, dans la leçon précédente, nous avons créé le parent de tous les contrôleurs.

Maintenant, nous pouvons faire en sorte que l'appel de la méthode du contrôleur, dont les données sont contenues dans notre variable $track, se produise.

C'est une classe spéciale Dispatcher qui s'en chargera. Le répartiteur recevra un objet de la classe Track et, à partir de ses données, créera un objet de la classe spécifiée, appellera la méthode de cette classe, en transmettant les paramètres à cette méthode.

Ajoutons l'appel du répartiteur dans le fichier index.php :

index.php<?php
  namespace Core;
  
  error_reporting(E_ALL);
  ini_set('display_errors', 'on');
  
  spl_autoload_register(function($class) {
    // votre implémentation de l'autochargement
  });
  
  $routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
  
  $track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
  
  // Appel du répartiteur :
  $page  = ( new Dispatcher ) -> getPage($track);
?>

L'appel de la méthode getPage de notre répartiteur appellera la méthode render du contrôleur et retournera ce que cet appel a renvoyé. Comme vous le savez déjà depuis la leçon précédente, la méthode render du contrôleur retourne un objet de la classe Page.

Voici l'ébauche de notre classe Dispatcher :

/core/Dispatcher.php<?php
  namespace Core;
  
  class Dispatcher
  {
    public function getPage(Track $track)
    {
      ...code
      return contrôleur -> render(paramètres);
    }
  }
?>
Задание 1

En utilisant mon ébauche, implémentez la classe Dispatcher décrite. Vérifiez son fonctionnement. En cas de difficultés, consultez le code source dans les fichiers de mon framework pédagogique réalisé.