classes/bfw/Dispatcher.php
author Markus Bröker<broeker.markus@googlemail.com>
Tue, 19 Sep 2017 13:04:18 +0200
changeset 51 bfcfa759003a
parent 39 8b4f9c6136f4
permissions -rw-r--r--
GSV ignorieren

<?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();
    }

}