src/Controller.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

/**
 * Created by Prowect
 * Author: Raffael Kessler
 * Date: 02.04.2016 - 10:58.
 * Copyright Prowect.
 */

namespace Drips\MVC;

use Drips\HTTP\Request;
use Drips\HTTP\Response;
use Drips\Utils\OutputBuffer;

/**
 * Class Controller.
 *
 * Diese Klasse ist Bestandteil des MVC-Systems von Drips. Der Controller ist
 * zuständig für die Abarbeitung von eingehenden Requests und sollte dafür
 * mit den zugehörigen Models und Views zusammenarbeiten.
 *
 * @property View $view
 * @property Request $request
 * @property Response $response
 */
abstract class Controller
{
    /**
     * @var View
     */
    protected $view;

    /**
     * @var Request
     */
    protected $request;

    /**
     * @var Response
     */
    protected $response;

    /**
     * Erzeugt eine neue Controller-Instanz und führt die zugehörige Methode abhängig von der HTTP-Methode aus, sofern
     * diese existiert. Die übergebenen Parameter werden an die Methode beim Aufruf übergeben.
     *
     * @param array $params
     *
     * @throws MethodNotAllowedException
     */
    public function __construct($params = array())
    {
        $this->view = new View();
        $this->request = Request::getInstance();
        $name = $this->request->getVerb();
        $this->response = new Response();

        $method = $name . 'Action';
        if (!method_exists($this, $method)) {
            throw new MethodNotAllowedException("Die Methode " . strtoupper($name) . " ist nicht erlaubt!");
        }
        $buffer = new OutputBuffer();
        $buffer->start();
        echo call_user_func_array(array($this, $method), $params);
        $buffer->end();

        $this->response->body = $buffer->getContent();
        $this->response->send();
    }
}