Entwicklung eines Dispatchers in Ihrem eigenen MVC-Framework
Erinnern wir uns an den aktuellen Inhalt der Datei index.php:
<?php
namespace Core;
error_reporting(E_ALL);
ini_set('display_errors', 'on');
spl_autoload_register(function($class) {
// Ihre Autoload-Implementierung
});
$routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
$track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
?>
Wie Sie sehen können, gibt unser Router vorläufig ein
Objekt der Klasse Track zurück, das den Namen des
Controllers, den Namen der Action und die Parameter aus
der Adresszeile enthält. Darüber hinaus haben wir in der vorherigen
Lektion einen Eltern-Controller für alle
Controller erstellt.
Nun können wir es so einrichten, dass der Aufruf der
Controller-Methode, deren Daten in unserer Variable $track
enthalten sind, stattfindet.
Dafür wird eine spezielle Klasse Dispatcher zuständig sein.
Der Dispatcher erhält ein Objekt der Klasse Track
und erstellt basierend auf seinen Daten ein Objekt der angegebenen
Klasse, ruft die Methode dieser Klasse auf und übergibt
der Methode die Parameter.
Fügen wir den Aufruf des Dispatchers in die Datei index.php hinzu:
<?php
namespace Core;
error_reporting(E_ALL);
ini_set('display_errors', 'on');
spl_autoload_register(function($class) {
// Ihre Autoload-Implementierung
});
$routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
$track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
// Aufruf des Dispatchers:
$page = ( new Dispatcher ) -> getPage($track);
?>
Der Aufruf der Methode getPage unseres Dispatchers
wird die Methode render des Controllers aufrufen
und das zurückgeben, was der Aufruf dieser Methode zurückgibt.
Wie Sie bereits aus der vorherigen Lektion wissen, gibt die Methode
render des Controllers ein Objekt der
Klasse Page zurück.
Hier ist der Entwurf unserer Klasse Dispatcher:
<?php
namespace Core;
class Dispatcher
{
public function getPage(Track $track)
{
...Code
return Controller -> render(Parameter);
}
}
?>
Implementieren Sie die beschriebene Klasse Dispatcher
unter Verwendung meines Entwurfs. Überprüfen Sie ihre Funktion.
Bei Schwierigkeiten sehen Sie sich den Quellcode
in den Dateien meines erstellten Lern-Frameworks an.