Распрацоўка дыспетчара ў сваім 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']);
?>
Як вы бачыце, пакуль у нас наш router вяртае
аб'ект класа 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
. Праверце яго працу.
Пры цяжкасцях паглядзіце зыходны код
у файлах зробленага мной вучэбнага фрэймворку.