⊗ppMVDFmDs 29 of 35 menu

Utveckling av en dispatcher i ditt eget MVC-ramverk

Låt oss komma ihåg det nuvarande innehållet i filen index.php:

<?php namespace Core; error_reporting(E_ALL); ini_set('display_errors', 'on'); spl_autoload_register(function($class) { // din implementation av autoloading }); $routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php'; $track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']); ?>

Som du ser returnerar vår router för närvarande ett objekt av klassen Track, som innehåller namn på kontrollern, namn på action och parametrar från adressraden. Dessutom skapade vi i föregående lektion en förälder till alla kontroller.

Nu kan vi göra så att anropet av kontroller-metoden, vars data finns i vår variabel $track, sker.

Detta kommer att hanteras av en speciell klass Dispatcher. Dispatchern kommer att ta emot ett objekt av klassen Track och enligt dess data skapa ett objekt av den angivna klassen, anropa metoden i denna klass, och skicka parametrarna till denna metod.

Låt oss lägga till anropet till dispatchern i filen index.php:

<?php namespace Core; error_reporting(E_ALL); ini_set('display_errors', 'on'); spl_autoload_register(function($class) { // din implementation av autoloading }); $routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php'; $track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']); // Anrop till dispatcher: $page = ( new Dispatcher ) -> getPage($track); ?>

Anropet till vår dispatchers metod getPage kommer att anropa kontrollerens metod render och returnera det som anropet till denna metod returnerade. Som du redan vet från föregående lektion returnerar kontrollerens metod render ett objekt av klassen Page.

Här är grunden till vår klass Dispatcher:

<?php namespace Core; class Dispatcher { public function getPage(Track $track) { ...kod return kontroller -> render(parametrar); } } ?>

Använd min grund och implementera den beskrivna klassen Dispatcher. Testa dess funktion. Vid svårigheter, titta på källkoden i filerna från mitt gjorda utbildningsramverk.

swesdahynl