Mini Shell
<?php
require_once 'Request.php';
require_once 'View.php';
require_once 'Configuration.php';
require_once 'Audit.php';
class Router {
// Check session timeout for logged in users
// Route incoming request and execute associated action :
// Merge GET/POST parameters from incoming request
// Instantiate corresponding controller
// Execute requested action
public function routerRequest() {
try {
$Request = new Request(array_merge($_GET, $_POST));
$Controller = $this->createController($Request);
$action = $this->createAction($Request);
// if($Controller->isLogged() && $Controller->isSessionValid()) {
// $Controller->executeAction($action);
// }
$Controller->executeAction($action);
}
catch (ErrorException $e) {
$this->handleError($e);
}
}
// Instanciate controller based on received request
private function createController(Request $Request) {
$controller = "Home"; // Default
if ($Request->existParameter('controller')) {
$controller = ucfirst(strtolower($Request->getParameter('controller'))); // 1st capital letter
}
$controllerClassName = "Controller$controller";
$controllerFileName = "controllers/" . $controllerClassName . ".php"; // Create controller filename
if (file_exists($controllerFileName)) {
require($controllerFileName);
$Controller = new $controllerClassName();
$Controller->setRequest($Request);
return $Controller;
}
else
throw new ErrorException("<p class='text-center'>Domaine non prévu (Classe '$controller' inexistante)",0,E_USER_NOTICE);
}
// Determine action based on received request
private function createAction(Request $Request) {
$action = "index"; // Default action
if ($Request->existParameter('action')) {
$action = $Request->getParameter('action');
}
return $action;
}
// Handle execution error
private function handleError(Exception $exception) {
$errFile = basename($exception->getFile());
$errLine = $exception->getLine();
$errMsg = $exception->getMessage();
$errSeverity = $exception->getSeverity() === E_USER_NOTICE ? "INFO" : "ERROR";
$View = new View('error');
$View->generate(array('errMsg' => $errMsg,
'errLine' => $errLine,
'errSeverity' => $errSeverity,
'errFile' => $errFile));
}
}