Dezvoltarea unui dispatcher în propriul framework MVC
Să ne amintim conținutul actual al fișierului index.php:
<?php
namespace Core;
error_reporting(E_ALL);
ini_set('display_errors', 'on');
spl_autoload_register(function($class) {
// implementarea ta de autoload
});
$routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
$track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
?>
După cum vedeți, momentan routerul nostru returnează
un obiect al clasei Track, care conține numele
controllerului, numele acțiunii și parametrii din
linia de adresă. În plus, în lecția precedentă
am creat părintele tuturor controllerelor.
Acum putem face ca metoda controllerului să fie apelată,
datele care sunt conținute în variabila noastră $track.
Aceasta va fi gestionată de o clasă specială Dispatcher.
Dispatcher-ul va primi obiectul clasei Track
și conform datelor sale va crea un obiect al clasei specificate,
va apela metoda acestei clase, transmitând
în această metodă parametrii.
Să adăugăm apelul dispatcher-ului în fișierul index.php:
<?php
namespace Core;
error_reporting(E_ALL);
ini_set('display_errors', 'on');
spl_autoload_register(function($class) {
// implementarea ta de autoload
});
$routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
$track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
// Apelul dispatcher-ului:
$page = ( new Dispatcher ) -> getPage($track);
?>
Apelul metodei getPage a dispatcher-ului nostru
va apela metoda render a controllerului
și va returna ceea ce returnează apelul acestei metode.
După cum știți deja din lecția precedentă, metoda
render a controllerului returnează un obiect
al clasei Page.
Iată schița clasei noastre Dispatcher:
<?php
namespace Core;
class Dispatcher
{
public function getPage(Track $track)
{
...cod
return controller -> render(parametri);
}
}
?>
Folosind schița mea, implementați clasa descrisă
Dispatcher. Verificați funcționarea acesteia.
În caz de dificultăți, consultați codul sursă
din fișierele framework-ului meu educațional realizat.