# Разработка диспетчера в своем 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`. Проверьте его работу. При затруднениях посмотрите исходный код в файлах сделанного мною учебного фреймворка.

← →
↑