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