Guten Abend werte Gemeinde,
ich arbeite derzeit an einem Projekt mit einigen Freunden, ich kümmere mich dabei um die "Basisstruktur" des Projektes. Da wir nicht auf ein Framework zurück greifen wollen, versuche ich sowas selbst zu implementieren.
Dabei orientiere ich mich geringfügig an Frameworks wie Symfony 2 und CodeIgniter.
Da ich noch nicht so viel Erfahrung bezüglich index-Routing (alle Serveranfragen laufen an die index.php) habe würde ich Euch bitten mal kurz über meinen Code drüber zu sehen und mich über eventuelle Fehlerquellen und Verbesserungen zu informieren.
Vielen Dank im voraus.
index.php:
Router.php:
EDIT: Backslashes werden hier scheinbar nicht richtig angezeigt, ich bitte das zu ignorieren
ich arbeite derzeit an einem Projekt mit einigen Freunden, ich kümmere mich dabei um die "Basisstruktur" des Projektes. Da wir nicht auf ein Framework zurück greifen wollen, versuche ich sowas selbst zu implementieren.
Dabei orientiere ich mich geringfügig an Frameworks wie Symfony 2 und CodeIgniter.
Da ich noch nicht so viel Erfahrung bezüglich index-Routing (alle Serveranfragen laufen an die index.php) habe würde ich Euch bitten mal kurz über meinen Code drüber zu sehen und mich über eventuelle Fehlerquellen und Verbesserungen zu informieren.
Vielen Dank im voraus.
index.php:
PHP-Code:
<?php
// Bootstrap.php laden (MUSS an erster Stelle stehen)
require_once 'bootstrap.php';
// Befinden wir uns in einer Developer-Umgebung werden PHP-Fehler angezeigt,
// andernfalls nicht.
if(DEV)
{
ini_set("display_errors", "1");
error_reporting(E_ALL);
}
try
{
// Angefragte Route auslesen
$route = $_SERVER['REQUEST_URI'];
// Router-Objekt erzeugen und Applikation starten
$app = new classes\\base\\Router($route);
$app->start();
}
catch(Exception $ex)
{
// Befinden wir uns in einer Developer-Umgebung werden Exceptions angezeigt,
// andernfalls in eine Datei gespeichert.
if(DEV)
{
echo '<br><br>Message: ' . $ex->getMessage() . '<br>';
echo 'File: ' . $ex->getFile() . '<br>';
echo 'Line: ' . $ex->getLine();
}
else
{
$now = new DateTime();
$data = 'Fehler trat auf am ' . $now->format('d.m.Y \u\m H:i:s') . ' Uhr';
$data .= 'Message: ' . $ex->getMessage() . PHP_EOL;
$data .= 'File: ' . $ex->getFile() . PHP_EOL;
$data .= 'Line: ' . $ex->getLine();
file_put_contents('Logfile.log', $data, FILE_APPEND);
}
}
PHP-Code:
<?php
namespace classes\\base;
use classes\\base\\Loader;
/**
* Description of Router
*
*/
class Router
{
private $requestUri = NULL;
/**
*
* @param string $requestUri Vom Nutzer angefragte URL
*/
public function __construct($requestUri)
{
$this->requestUri = $requestUri;
}
/**
* Startet die Applikation, prüft ob die eingegebene URL gültig ist und
* ruft ggf. den entsprechenden Controller und die hinterlegte Methode auf
*
* Einzige Stelle im Code die ein "echo" nutzen darf.
*/
public function start()
{
$routes = $this->getRoutes();
$found_route = FALSE;
foreach($routes as $route)
{
if($this->requestUri === $route->route)
{
$found_route = TRUE;
require_once 'controller/' . $route->controller . '.php';
$controller = new $route->controller();
echo $controller->{$route->action}();
}
}
if(!$found_route)
{
// Seite ist uns nicht bekannt. (eventuell hier eine 404-Error View)
header("HTTP/1.1 404 Not Found");
exit("Die angeforderte Seite ist uns nicht bekannt");
}
}
/**
*
* @return object Gibt ein Objekt mit allen konfigurierten Routes zurück
*/
private function getRoutes()
{
$loader = new Loader();
return $loader->loadConfig('routes');
}
}
Kommentar