<?php
/**
* Copyright(C) 2015 Markus Bröker<broeker.markus@googlemail.com>
*
*/
namespace bfw;
use bfw\core\Controller;
use ReflectionClass;
use ReflectionException;
/**
* Class Dispatcher
*/
class Dispatcher {
private $request;
public function __construct() {
$this->request = new Request();
}
/**
* @param $url
*/
public static function route($url) {
header(sprintf("Location: %s", $url));
exit(0);
}
/**
* <b>Standard Request Handler für das Projekt</b>
*
* Diese Instanz kümmert sich selbständig um die GET- und POST Werte und
* speichert diese in der Session.
*
* Einfach zu nutzende Methoden(Schnittstelle zur Session) komplettieren diesen Handler
*
* @return Request
*/
public function getRequest() {
return $this->request;
}
/**
* <b>Führt den jeweiligen Controller aus</b>
*
*/
public function delegate() {
$this->request->keepRequestData();
$controllerName = $this->request->get('controller', 'home');
$action = $this->request->get('action', 'index');
$class = Controller::findControllerInNameSpace($controllerName);
try {
$reflection = new ReflectionClass($class);
$controller = $reflection->newInstance();
// Mapping vom GET-Parameter 'action' auf Controller::$action()
if (!$reflection->hasMethod($action)) {
$action = 'index';
}
} catch (ReflectionException $re) {
$controller = new mvc\controller\ErrorController();
$action = 'index';
}
return $controller->$action();
}
}