Diszpécser fejlesztése saját MVC keretrendszerben
Emlékezzünk vissza a index.php fájl jelenlegi tartalmára:
<?php
namespace Core;
error_reporting(E_ALL);
ini_set('display_errors', 'on');
spl_autoload_register(function($class) {
// az Ön automatikus betöltési implementációja
});
$routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
$track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
?>
Amint láthatja, jelenleg a routerünk egy
Track osztályú objektumot ad vissza,
amely tartalmazza a vezérlő nevét,
a művelet nevét és a paramétereket a
cím sorból. Ezenkívül az előző
leckében elkészítettük az összes
vezérlő szülőjét.
Most már megtehetjük, hogy meghívásra kerüljön
a vezérlő metódusa, amelynek adatai
a $track változónkban találhatók.
Ezt egy speciális Dispatcher osztály fogja elvégezni.
A diszpécser megkapja a Track osztály objektumát
és annak adatai alapján létrehozza a megadott
osztály objektumát, meghívja az osztály metódusát, átadva
a metódusnak a paramétereket.
Adjunk hozzá diszpécser hívást a index.php fájlhoz:
<?php
namespace Core;
error_reporting(E_ALL);
ini_set('display_errors', 'on');
spl_autoload_register(function($class) {
// az Ön automatikus betöltési implementációja
});
$routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
$track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
// Diszpécser hívása:
$page = ( new Dispatcher ) -> getPage($track);
?>
A diszpécser getPage metódusának hívása
meghívja a vezérlő render metódusát
és visszaadja, amit a metódus hívása visszaadott.
Amint az előző leckéből már tudja, a
render metódus egy
Page osztályú objektumot ad vissza.
Itt a Dispatcher osztályunk vázlata:
<?php
namespace Core;
class Dispatcher
{
public function getPage(Track $track)
{
...kód
return vezérlő -> render(paraméterek);
}
}
?>
Az általam készített vázlat felhasználásával valósítsa meg a leírt
Dispatcher osztályt. Ellenőrizze a működését.
Nehézség esetén nézze meg a forráskódot
az általam készített oktatási keretrendszer fájljaiban.