Sviluppo del Dispatcher nel proprio framework MVC
Ricordiamo il contenuto attuale del file index.php:
<?php
namespace Core;
error_reporting(E_ALL);
ini_set('display_errors', 'on');
spl_autoload_register(function($class) {
// la tua implementazione dell'autocaricamento
});
$routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
$track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
?>
Come puoi vedere, per ora il nostro router restituisce
un oggetto della classe Track, contenente il nome
del controller, il nome dell'azione e i parametri
della stringa dell'URL. Inoltre, nella lezione
precedente abbiamo creato il genitore di tutti
i controller.
Ora possiamo fare in modo che venga effettuata
la chiamata al metodo del controller, i cui dati
sono contenuti nella nostra variabile $track.
Questo compito spetterà a una classe speciale Dispatcher.
Il dispatcher riceverà un oggetto della classe Track
e in base ai suoi dati creerà un oggetto della classe
indicata, chiamerà il metodo di questa classe, passando
a questo metodo i parametri.
Aggiungiamo la chiamata al dispatcher nel file index.php:
<?php
namespace Core;
error_reporting(E_ALL);
ini_set('display_errors', 'on');
spl_autoload_register(function($class) {
// la tua implementazione dell'autocaricamento
});
$routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
$track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
// Chiamata del dispatcher:
$page = ( new Dispatcher ) -> getPage($track);
?>
La chiamata al metodo getPage del nostro dispatcher
chiamerà il metodo render del controller
e restituirà ciò che è stato restituito dalla chiamata di questo metodo.
Come già sai dalla lezione precedente, il metodo
render del controller restituisce un oggetto
della classe Page.
Ecco la bozza della nostra classe Dispatcher:
<?php
namespace Core;
class Dispatcher
{
public function getPage(Track $track)
{
...codice
return controller -> render(parametri);
}
}
?>
Utilizzando la mia bozza, implementa la classe
Dispatcher come descritto. Verifica il suo funzionamento.
In caso di difficoltà, guarda il codice sorgente
nei file del mio framework didattico realizzato.