Ontwikkeling van een dispatcher in je eigen MVC-framework
Laten we de huidige inhoud van het bestand index.php herinneren:
<?php
namespace Core;
error_reporting(E_ALL);
ini_set('display_errors', 'on');
spl_autoload_register(function($class) {
// jouw implementatie van autoloading
});
$routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
$track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
?>
Zoals je ziet, geeft onze router voorlopig een
object van de klasse Track terug, dat de naam
van de controller, de naam van de action en de parameters uit
de adresbalk bevat. Bovendien hebben we in de vorige
les een ouder voor alle
controllers gemaakt.
Nu kunnen we ervoor zorgen dat de methode
van de controller wordt aangeroepen, waarvan de gegevens
zijn opgeslagen in onze variabele $track.
Dit wordt gedaan door een speciale klasse Dispatcher.
De dispatcher krijgt een object van de klasse Track
en creëert op basis van de gegevens daarvan een object van de opgegeven
klasse, roept de methode van deze klasse aan, en geeft
de parameters door aan deze methode.
Laten we de aanroep van de dispatcher toevoegen aan het bestand index.php:
<?php
namespace Core;
error_reporting(E_ALL);
ini_set('display_errors', 'on');
spl_autoload_register(function($class) {
// jouw implementatie van autoloading
});
$routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
$track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
// Aanroep van de dispatcher:
$page = ( new Dispatcher ) -> getPage($track);
?>
De aanroep van de methode getPage van onze dispatcher
zal de methode render van de controller
aanroepen en teruggeven wat de aanroep van deze methode retourneert.
Zoals je al weet uit de vorige les, retourneert de methode
render van de controller een object
van de klasse Page.
Hier is de basisopzet van onze klasse Dispatcher:
<?php
namespace Core;
class Dispatcher
{
public function getPage(Track $track)
{
...code
return controller -> render(parameters);
}
}
?>
Implementeer de beschreven klasse Dispatcher met behulp van mijn basisopzet.
Test de werking ervan.
Raadpleeg bij problemen de broncode
in de bestanden van het door mij gemaakte educatieve framework.