Line 89... |
Line 89... |
89 |
|
89 |
|
90 |
/** Code d'erreur HTTP 500 Internal Server Error.
|
90 |
/** Code d'erreur HTTP 500 Internal Server Error.
|
91 |
* L'utiliser quand le serveur ou un service soulève une erreur ou une exception. */
|
91 |
* L'utiliser quand le serveur ou un service soulève une erreur ou une exception. */
|
Line 92... |
Line 92... |
92 |
const HTTP_CODE_ERREUR = '500';
|
92 |
const HTTP_CODE_ERREUR = '500';
|
- |
|
93 |
|
- |
|
94 |
/** Mettre à true pour activer l'affichage des messages d'erreurs et de débogage.
|
- |
|
95 |
* @var boolean */
|
- |
|
96 |
private $debogageActivation = false;
|
93 |
|
97 |
|
94 |
/** Les paramètres de configuration dynamiques internes au serveur.
|
98 |
/** Indiquer le mode de débogage à utiliser (@see Debug).
|
Line 95... |
Line 99... |
95 |
* @var array */
|
99 |
* @var string */
|
96 |
private static $config = array();
|
100 |
private $debogageMode = '';
|
97 |
|
101 |
|
Line 148... |
Line 152... |
148 |
/**
|
152 |
/**
|
149 |
* Analyse les données envoyées au serveur, enregistre la méthode HTTP utilisée pour appeler le serveur et parse
|
153 |
* Analyse les données envoyées au serveur, enregistre la méthode HTTP utilisée pour appeler le serveur et parse
|
150 |
* l'url appelée pour trouver le service demandé.
|
154 |
* l'url appelée pour trouver le service demandé.
|
151 |
*/
|
155 |
*/
|
152 |
public function __construct() {
|
156 |
public function __construct() {
|
- |
|
157 |
$this->debogageActivation = Config::get('fw_debogage');
|
- |
|
158 |
$this->debogageMode = Config::get('fw_debogage_mode');
|
- |
|
159 |
|
153 |
if (isset($_SERVER['REQUEST_URI']) && isset($_SERVER['REQUEST_METHOD']) && isset($_SERVER['QUERY_STRING'])) {
|
160 |
if (isset($_SERVER['REQUEST_URI']) && isset($_SERVER['REQUEST_METHOD']) && isset($_SERVER['QUERY_STRING'])) {
|
154 |
$this->initialiserMethode();
|
161 |
$this->initialiserMethode();
|
155 |
$this->initialiserRequeteDonnees();
|
162 |
$this->initialiserRequeteDonnees();
|
Line 156... |
Line 163... |
156 |
|
163 |
|
Line 298... |
Line 305... |
298 |
* when a resource name is given, or a resource element when a resource and resource unique identifier are given. It does not change the
|
305 |
* when a resource name is given, or a resource element when a resource and resource unique identifier are given. It does not change the
|
299 |
* database contents.
|
306 |
* database contents.
|
300 |
*/
|
307 |
*/
|
301 |
private function get() {
|
308 |
private function get() {
|
302 |
if ($this->service != null) {
|
309 |
if ($this->service != null) {
|
303 |
$Service = new $this->service(self::$config);
|
310 |
$Service = new $this->service();
|
304 |
if (method_exists($Service, self::METHODE_GET)) {
|
311 |
if (method_exists($Service, self::METHODE_GET)) {
|
305 |
$methodeGet = self::METHODE_GET;
|
312 |
$methodeGet = self::METHODE_GET;
|
306 |
$Service->$methodeGet($this->ressources, $this->parametres);
|
313 |
$Service->$methodeGet($this->ressources, $this->parametres);
|
307 |
} else {
|
314 |
} else {
|
308 |
$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_GET."' nécessaire ".
|
315 |
$e = "Le service '{$this->service}' ne contient pas la méthode '".self::METHODE_GET."' nécessaire ".
|
Line 320... |
Line 327... |
320 |
$this->delete();
|
327 |
$this->delete();
|
321 |
} else if (count($this->ressources) == 0) {// Altnative à l'utilisation de PUT
|
328 |
} else if (count($this->ressources) == 0) {// Altnative à l'utilisation de PUT
|
322 |
$this->add();
|
329 |
$this->add();
|
323 |
} else {
|
330 |
} else {
|
324 |
if ($this->service != null) {
|
331 |
if ($this->service != null) {
|
325 |
$Service = new $this->service(self::$config);
|
332 |
$Service = new $this->service();
|
326 |
if (method_exists($Service, self::METHODE_POST)) {
|
333 |
if (method_exists($Service, self::METHODE_POST)) {
|
327 |
$methodePost = self::METHODE_POST;
|
334 |
$methodePost = self::METHODE_POST;
|
328 |
if ($Service->$methodePost($this->ressources, $paires)) {
|
335 |
if ($Service->$methodePost($this->ressources, $paires)) {
|
329 |
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
|
336 |
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
|
330 |
}
|
337 |
}
|
Line 343... |
Line 350... |
343 |
private function put() {
|
350 |
private function put() {
|
344 |
$paires = $this->parserDonneesRequete();
|
351 |
$paires = $this->parserDonneesRequete();
|
Line 345... |
Line 352... |
345 |
|
352 |
|
346 |
if (count($paires) != 0) {
|
353 |
if (count($paires) != 0) {
|
347 |
if ($this->service != null) {
|
354 |
if ($this->service != null) {
|
348 |
$Service = new $this->service(self::$config);
|
355 |
$Service = new $this->service();
|
349 |
if (method_exists($Service, self::METHODE_PUT)) {
|
356 |
if (method_exists($Service, self::METHODE_PUT)) {
|
350 |
$methodePut = self::METHODE_PUT;
|
357 |
$methodePut = self::METHODE_PUT;
|
351 |
if ($Service->$methodePut($this->ressources, $paires)) {
|
358 |
if ($Service->$methodePut($this->ressources, $paires)) {
|
352 |
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
|
359 |
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_CREATION_OK);
|
Line 363... |
Line 370... |
363 |
}
|
370 |
}
|
Line 364... |
Line 371... |
364 |
|
371 |
|
365 |
private function delete() {
|
372 |
private function delete() {
|
366 |
if (count($this->ressources) != 0) {
|
373 |
if (count($this->ressources) != 0) {
|
367 |
if ($this->service != null) {
|
374 |
if ($this->service != null) {
|
368 |
$Service = new $this->service(self::$config);
|
375 |
$Service = new $this->service();
|
369 |
if (method_exists($Service, self::METHODE_DELETE)) {
|
376 |
if (method_exists($Service, self::METHODE_DELETE)) {
|
370 |
$methodeDelete = self::METHODE_DELETE;
|
377 |
$methodeDelete = self::METHODE_DELETE;
|
371 |
if ($Service->$methodeDelete($this->ressources, $paires)) {
|
378 |
if ($Service->$methodeDelete($this->ressources, $paires)) {
|
372 |
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_SUPPRESSION_OK);
|
379 |
$this->envoyerEnteteStatutHttp(self::HTTP_CODE_SUPPRESSION_OK);
|
Line 419... |
Line 426... |
419 |
header("HTTP/1.0 $code $txt", true);
|
426 |
header("HTTP/1.0 $code $txt", true);
|
420 |
}
|
427 |
}
|
421 |
}
|
428 |
}
|
Line 422... |
Line 429... |
422 |
|
429 |
|
423 |
/**
|
430 |
/**
|
- |
|
431 |
* Si des exceptions ou des erreurs sont soulevées par le serveur ou les services, elles sont gérées par cette méthode.
|
- |
|
432 |
* Si nous avec des erreurs d'un type différent d'E_USER_NOTICE (réservé au débogage), elle sont renvoyées sur la sortie
|
- |
|
433 |
* standard (via echo).
|
- |
|
434 |
* Si seulement des erreurs de type E_USER_NOTICE, sont présentes, elle sont envoyées en fonction du contenu du paramètre de
|
- |
|
435 |
* config "fw_debogage_mode" :
|
- |
|
436 |
* - Debug::MODE_ECHO : les messages sont affichés en utilisant echo au moment où ils sont déclenchés dans le code.
|
- |
|
437 |
* - Debug::MODE_NOTICE : les message sont stockés par le gestionnaire d'exception sous forme d'erreur de type
|
- |
|
438 |
* E_USER_NOTICE et sont renvoyés sur la sortie standard à la fin de l'execution du programme (via echo).
|
- |
|
439 |
* - Debug::MODE_ENTETE_HTTP : les message sont stockés par le gestionnaire d'exception sous forme d'erreur de type
|
- |
|
440 |
* E_USER_NOTICE et sont renvoyés dans un entête HTTP (X_REST_DEBOGAGE_MESSAGES) à la fin de l'execution du programme.
|
424 |
* Si des exceptions ou des erreurs sont soulevées par le serveur ou les services, elles sont gérées par cette méthode.
|
441 |
* - Autre valeur : les messages sont formatés puis retournés par la fonction de débogage (à vous de les afficher).
|
425 |
*/
|
442 |
*/
|
426 |
public static function gererErreurs() {
|
443 |
public static function gererErreurs() {
|
427 |
if (Config::get('fw_debogage') && GestionnaireException::getExceptionsNbre() > 0) {
|
444 |
if ($this->debogageActivation && GestionnaireException::getExceptionsNbre() > 0) {
|
428 |
$exceptionsTriees = GestionnaireException::getExceptionsTriees();
|
445 |
$exceptionsTriees = GestionnaireException::getExceptionsTriees();
|
- |
|
446 |
reset($exceptionsTriees);
|
429 |
reset($exceptionsTriees);
|
447 |
$debogageSeulement = true;
|
430 |
if (! (count($exceptionsTriees) == 1 && key($exceptionsTriees) == E_USER_NOTICE)) {
|
448 |
if (! (count($exceptionsTriees) == 1 && key($exceptionsTriees) == E_USER_NOTICE)) {
|
- |
|
449 |
self::envoyerEnteteStatutHttp(self::HTTP_CODE_ERREUR);
|
431 |
self::envoyerEnteteStatutHttp(self::HTTP_CODE_ERREUR);
|
450 |
$debogageSeulement = false;
|
- |
|
451 |
}
|
- |
|
452 |
|
432 |
}
|
453 |
$exceptionsFormatees = array();
|
433 |
foreach ($exceptionsTriees as $exceptions) {
|
454 |
foreach ($exceptionsTriees as $exceptions) {
|
- |
|
455 |
foreach ($exceptions as $e) {
|
- |
|
456 |
if ($debogageSeulement && $this->debogageMode == Debug::MODE_ENTETE_HTTP) {
|
- |
|
457 |
$exceptionsFormatees[] = GestionnaireException::formaterExceptionTxt($e);
|
434 |
foreach ($exceptions as $e) {
|
458 |
} else {
|
- |
|
459 |
echo GestionnaireException::formaterExceptionXhtml($e);
|
435 |
echo GestionnaireException::formaterExceptionXhtml($e);
|
460 |
}
|
436 |
}
|
461 |
}
|
- |
|
462 |
}
|
- |
|
463 |
|
- |
|
464 |
if ($debogageSeulement && $this->debogageMode == Debug::MODE_ENTETE_HTTP) {
|
- |
|
465 |
header('X_REST_DEBOGAGE_MESSAGES: '.json_encode($exceptionsFormatees));
|
437 |
}
|
466 |
}
|
438 |
}
|
467 |
}
|
439 |
}
|
468 |
}
|
440 |
}
|
469 |
}
|
441 |
?>
|
470 |
?>
|