<?php class Request { protected $controllerName; protected $uriParameters; protected $data; protected static $_instance; public static function getCurrentRequest(){ if(is_null(self::$_instance)) { self::$_instance = new Request(); } return self::$_instance; } public function __construct() { $this->initBaseURI(); $this->initControllerAndParametersFromURI(); $this->initData(); } // intialise baseURI // e.g. http://eden.imt-lille-douai.fr/~luc.fabresse/api.php => __BASE_URI = /~luc.fabresse // e.g. http://localhost/CDAW/api.php => __BASE_URI = /CDAW protected function initBaseURI() { $this->baseURI = parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY); } // intialise controllerName et uriParameters // controllerName contient chaîne 'default' ou le nom du controleur s'il est présent dans l'URI (la requête) // uriParameters contient un tableau vide ou un tableau contenant les paramètres passés dans l'URI (la requête) // e.g. http://eden.imt-lille-douai.fr/~luc.fabresse/api.php // => controllerName == 'default' // uriParameters == [] // e.g. http://eden.imt-lille-douai.fr/~luc.fabresse/api.php/user/1 // => controllerName == 'user' // uriParameters == [ 1 ] protected function initControllerAndParametersFromURI(){ $prefix = $_SERVER['SCRIPT_NAME']; $uriParameters = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); $i=0; while($i<strlen($prefix) && $i<strlen($uriParameters)) if($prefix[$i]===$uriParameters[$i]) $i++; $uriParameters = substr($uriParameters, $i); $uriParameters = trim($uriParameters, '/'); $uriSegments = explode('/', $uriParameters); $this->controllerName = array_shift($uriSegments) ?: "default"; $this->uriParameters = $uriSegments; } // ============== // Public API // ============== // retourne le name du controleur qui doit traiter la requête courante public function getControllerName() { return $this->controllerName; } public function getUriParams() { return $this->uriParameters; } public function initData() { if ($this->getHttpMethod() === 'PUT'){ $this->data = ""; $stream = fopen("php://input", "r"); $next_byte=fread($stream, '1024'); $this->data .= $next_byte; fclose($stream); $this->data=json_decode($this->data, TRUE); } } // retourne la méthode HTTP utilisée dans la requête courante public function getHttpMethod() { return $_SERVER["REQUEST_METHOD"]; } public function getData() { return $this->data; } }