Utvikling av en dispatcher i ditt eget MVC-rammeverk
La oss huske innholdet i filen index.php for øyeblikket:
<?php
namespace Core;
error_reporting(E_ALL);
ini_set('display_errors', 'on');
spl_autoload_register(function($class) {
// din implementasjon av autolasting
});
$routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
$track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
?>
Som du ser, returnerer ruteren vår for øyeblikket
et objekt av klassen Track, som inneholder navnet
på kontrolleren, navnet på handlingen og parametrene fra
adresselinjen. I tillegg laget vi i forrige
leksjon en forelder for alle
kontrollerne.
Nå kan vi gjøre det slik at
metoden til kontrolleren blir kalt, med dataene
som finnes i variabelen vår $track.
Dette vil bli håndtert av en spesiell klasse Dispatcher.
Dispatcheren vil motta et objekt av klassen Track
og basert på dens data opprette et objekt av den angitte
klassen, kalle metoden til denne klassen, og sende
parametrene inn i denne metoden.
La oss legge til kall til dispatcheren i filen index.php:
<?php
namespace Core;
error_reporting(E_ALL);
ini_set('display_errors', 'on');
spl_autoload_register(function($class) {
// din implementasjon av autolasting
});
$routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
$track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
// Kall til dispatcher:
$page = ( new Dispatcher ) -> getPage($track);
?>
Kall til metoden getPage i dispatcheren vår
vil kalle metoden render til kontrolleren
og returnere det som dette metodekallet returnerer.
Som du allerede vet fra forrige leksjon, returnerer
metoden render til kontrolleren et objekt
av klassen Page.
Her er skjelettet til klassen Dispatcher vår:
<?php
namespace Core;
class Dispatcher
{
public function getPage(Track $track)
{
...kode
return kontroller -> render(parametere);
}
}
?>
Bruk mitt skjelett og implementer den beskrevne
klassen Dispatcher. Test dens funksjon.
Hvis du støter på vanskeligheter, se kildekoden
i filene til det pedagogiske rammeverket jeg har laget.