Udvikling af en dispatcher i dit eget MVC-framework
Lad os huske det nuværende indhold af filen index.php:
<?php
namespace Core;
error_reporting(E_ALL);
ini_set('display_errors', 'on');
spl_autoload_register(function($class) {
// din implementering af autoload
});
$routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
$track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
?>
Som du kan se, returnerer vores router for nu
et objekt af klassen Track, som indeholder navnet på
controlleren, navnet på actionen og parametre fra
adresselinjen. Derudover lavede vi i den forrige
lektion en forælder til alle
controllere.
Nu kan vi gøre det sådan, at der sker et
kald til controllerens metode, hvis data
er indeholdt i vores variabel $track.
Dette vil blive håndteret af en speciel klasse Dispatcher.
Dispatcheren vil modtage et objekt af klassen Track
og baseret på dets data oprette et objekt af den angivne
klasse, kalde metoden i denne klasse og videregive
parametre til denne metode.
Lad os tilføje kaldet til dispatcheren i filen index.php:
<?php
namespace Core;
error_reporting(E_ALL);
ini_set('display_errors', 'on');
spl_autoload_register(function($class) {
// din implementering af autoload
});
$routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
$track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
// Kald til dispatcher:
$page = ( new Dispatcher ) -> getPage($track);
?>
Kaldet til metoden getPage af vores dispatcher
vil kalde controllerens metode render
og returnere det, som kaldet til denne metode returnerer.
Som du allerede ved fra forrige lektion, returnerer metoden
render i controlleren et objekt
af klassen Page.
Her er udkastet til vores klasse Dispatcher:
<?php
namespace Core;
class Dispatcher
{
public function getPage(Track $track)
{
...kode
return controller -> render(parametre);
}
}
?>
Brug mit udkast til at implementere den beskrevne
klasse Dispatcher. Test dens funktion.
Hvis du har problemer, kan du kigge i kildekoden
i filerne fra mit lavede undervisningsframework.