Разработка диспетчера в своем MVC фреймворке

Вспомним текущее содержимое файла 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:

<?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:

<?php namespace Core; class Dispatcher { public function getPage(Track $track) { ...код return контроллер -> render(параметры); } } ?>

Используя мою заготовку реализуйте описанный класс Dispatcher. Проверьте его работу. При затруднениях посмотрите исходный код в файлах сделанного мною учебного фреймворка.