Tworzenie dyspozytora we własnym frameworku MVC
Przypomnijmy sobie obecną zawartość pliku index.php:
<?php
namespace Core;
error_reporting(E_ALL);
ini_set('display_errors', 'on');
spl_autoload_register(function($class) {
// twoja implementacja autoloadingu
});
$routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
$track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
?>
Jak widzicie, na razie nasz router zwraca
obiekt klasy Track, zawierający nazwę
kontrolera, nazwę akcji oraz parametry z
ciągu adresowego. Ponadto, w poprzedniej
lekcji stworzyliśmy rodzica wszystkich
kontrolerów.
Teraz możemy sprawić, aby nastąpiło
wywołanie metody kontrolera, którego dane
zawarte są w naszej zmiennej $track.
Zajmie się tym specjalna klasa Dispatcher.
Dyspozytor będzie otrzymywał obiekt klasy Track
i na podstawie jego danych tworzył obiekt wskazanej
klasy, wywoływał metodę tej klasy, przekazując
do tej metody parametry.
Dodajmy wywołanie dyspozytora do pliku index.php:
<?php
namespace Core;
error_reporting(E_ALL);
ini_set('display_errors', 'on');
spl_autoload_register(function($class) {
// twoja implementacja autoloadingu
});
$routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
$track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
// Wywołanie dyspozytora:
$page = ( new Dispatcher ) -> getPage($track);
?>
Wywołanie metody getPage naszego dyspozytora
będzie wywoływać metodę render kontrolera
i zwracać to, co zwróciło wywołanie tej metody.
Jak już wiecie z poprzedniej lekcji, metoda
render kontrolera zwraca obiekt
klasy Page.
Oto szablon naszej klasy Dispatcher:
<?php
namespace Core;
class Dispatcher
{
public function getPage(Track $track)
{
...kod
return kontroler -> render(parametry);
}
}
?>
Korzystając z mojego szablonu zaimplementuj opisaną
klasę Dispatcher. Sprawdź jej działanie.
W przypadku trudności zajrzyj do kodu źródłowego
w plikach wykonanego przeze mnie edukacyjnego frameworka.