Desenvolvimento do Dispatcher no seu próprio framework MVC
Vamos lembrar o conteúdo atual do arquivo index.php:
<?php
namespace Core;
error_reporting(E_ALL);
ini_set('display_errors', 'on');
spl_autoload_register(function($class) {
// sua implementação de autoload
});
$routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
$track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
?>
Como você pode ver, atualmente nosso roteador retorna
um objeto da classe Track, contendo o nome
do controlador, o nome da ação e os parâmetros da
URL. Além disso, na lição anterior
fizemos o pai de todos os
controladores.
Agora podemos fazer com que ocorra
a chamada do método do controlador, cujos dados
estão contidos em nossa variável $track.
Isso será feito por uma classe especial Dispatcher.
O dispatcher receberá um objeto da classe Track
e com base em seus dados criará um objeto da classe
especificada, chamará o método dessa classe, passando
para esse método os parâmetros.
Vamos adicionar a chamada do dispatcher no arquivo index.php:
<?php
namespace Core;
error_reporting(E_ALL);
ini_set('display_errors', 'on');
spl_autoload_register(function($class) {
// sua implementação de autoload
});
$routes = require $_SERVER['DOCUMENT_ROOT'] . '/project/config/routes.php';
$track = ( new Router ) -> getTrack($routes, $_SERVER['REQUEST_URI']);
// Chamada do dispatcher:
$page = ( new Dispatcher ) -> getPage($track);
?>
A chamada do método getPage do nosso dispatcher
chamará o método render do controlador
e retornará o que a chamada desse método retornou.
Como você já sabe da lição anterior, o método
render do controlador retorna um objeto
da classe Page.
Aqui está o esboço da nossa classe Dispatcher:
<?php
namespace Core;
class Dispatcher
{
public function getPage(Track $track)
{
...código
return controlador -> render(parâmetros);
}
}
?>
Usando meu esboço, implemente a classe
Dispatcher descrita. Verifique seu funcionamento.
Em caso de dificuldades, consulte o código-fonte
nos arquivos do framework educacional que fiz.