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