Desarrollo de un Dispatcher en tu propio framework MVC
Recordemos el contenido actual del archivo index.php:
<?php
namespace Core;
error_reporting(E_ALL);
ini_set('display_errors', 'on');
spl_autoload_register(function($class) {
// tu implementación de autocarga
});
$routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
$track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
?>
Como puedes ver, por ahora nuestro enrutador retorna
un objeto de la clase Track, que contiene el nombre
del controlador, el nombre de la acción y los parámetros de
la cadena de consulta. Además, en la lección anterior
creamos el padre de todos los controladores.
Ahora podemos hacer que se invoque el método
del controlador, cuyos datos están contenidos
en nuestra variable $track.
Esto lo hará una clase especial Dispatcher.
El dispatcher obtendrá un objeto de la clase Track
y, basándose en sus datos, creará un objeto de la clase
especificada, invocará el método de esta clase, pasando
los parámetros a este método.
Agreguemos la llamada al dispatcher en el archivo index.php:
<?php
namespace Core;
error_reporting(E_ALL);
ini_set('display_errors', 'on');
spl_autoload_register(function($class) {
// tu implementación de autocarga
});
$routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
$track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
// Llamada al dispatcher:
$page = ( new Dispatcher ) -> getPage($track);
?>
La llamada al método getPage de nuestro dispatcher
invocará el método render del controlador
y retornará lo que devuelva la llamada a este método.
Como ya sabes por la lección anterior, el método
render del controlador retorna un objeto
de la clase Page.
Aquí tienes la plantilla de nuestra clase Dispatcher:
<?php
namespace Core;
class Dispatcher
{
public function getPage(Track $track)
{
...código
return controlador -> render(parámetros);
}
}
?>
Utilizando mi plantilla, implementa la clase
Dispatcher descrita. Verifica su funcionamiento.
Si tienes dificultades, revisa el código fuente
en los archivos de mi framework educativo ya hecho.