Ўз 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 классни амалга оширинг. Унинг ишлашини текширинг.
Қийинчилик пайдо бўлса, мен томонимдан амалга оширилган ўқув фреймворкининг
манба кодларига қаранг.