Диспетчерро дар фреймворки 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-ро татбиқ кунед. Коркарди онро санҷед. Дар мавриди душворӣ ба коди ибтидоӣ дар файлҳои фреймворки таълимии сохтаи ман нигаред.