Subversion Repositories Applications.framework

Compare Revisions

Ignore whitespace Rev 236 → Rev 237

/trunk/framework/Serveur.php
91,10 → 91,14
* L'utiliser quand le serveur ou un service soulève une erreur ou une exception. */
const HTTP_CODE_ERREUR = '500';
/** Les paramètres de configuration dynamiques internes au serveur.
* @var array */
private static $config = array();
/** Mettre à true pour activer l'affichage des messages d'erreurs et de débogage.
* @var boolean */
private $debogageActivation = false;
/** Indiquer le mode de débogage à utiliser (@see Debug).
* @var string */
private $debogageMode = '';
/** La méthode de la requête HTTP utilisée.
* @var string */
private $methode = 'GET';
150,6 → 154,9
* l'url appelée pour trouver le service demandé.
*/
public function __construct() {
$this->debogageActivation = Config::get('fw_debogage');
$this->debogageMode = Config::get('fw_debogage_mode');
 
if (isset($_SERVER['REQUEST_URI']) && isset($_SERVER['REQUEST_METHOD']) && isset($_SERVER['QUERY_STRING'])) {
$this->initialiserMethode();
$this->initialiserRequeteDonnees();
300,7 → 307,7
*/
private function get() {
if ($this->service != null) {
$Service = new $this->service(self::$config);
$Service = new $this->service();
if (method_exists($Service, self::METHODE_GET)) {
$methodeGet = self::METHODE_GET;
$Service->$methodeGet($this->ressources, $this->parametres);
322,7 → 329,7
$this->add();
} else {
if ($this->service != null) {
$Service = new $this->service(self::$config);
$Service = new $this->service();
if (method_exists($Service, self::METHODE_POST)) {
$methodePost = self::METHODE_POST;
if ($Service->$methodePost($this->ressources, $paires)) {
345,7 → 352,7
 
if (count($paires) != 0) {
if ($this->service != null) {
$Service = new $this->service(self::$config);
$Service = new $this->service();
if (method_exists($Service, self::METHODE_PUT)) {
$methodePut = self::METHODE_PUT;
if ($Service->$methodePut($this->ressources, $paires)) {
365,7 → 372,7
private function delete() {
if (count($this->ressources) != 0) {
if ($this->service != null) {
$Service = new $this->service(self::$config);
$Service = new $this->service();
if (method_exists($Service, self::METHODE_DELETE)) {
$methodeDelete = self::METHODE_DELETE;
if ($Service->$methodeDelete($this->ressources, $paires)) {
421,20 → 428,42
}
/**
* Si des exceptions ou des erreurs sont soulevées par le serveur ou les services, elles sont gérées par cette méthode.
* Si des exceptions ou des erreurs sont soulevées par le serveur ou les services, elles sont gérées par cette méthode.
* 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
* standard (via echo).
* Si seulement des erreurs de type E_USER_NOTICE, sont présentes, elle sont envoyées en fonction du contenu du paramètre de
* config "fw_debogage_mode" :
* - Debug::MODE_ECHO : les messages sont affichés en utilisant echo au moment où ils sont déclenchés dans le code.
* - Debug::MODE_NOTICE : les message sont stockés par le gestionnaire d'exception sous forme d'erreur de type
* E_USER_NOTICE et sont renvoyés sur la sortie standard à la fin de l'execution du programme (via echo).
* - Debug::MODE_ENTETE_HTTP : les message sont stockés par le gestionnaire d'exception sous forme d'erreur de type
* E_USER_NOTICE et sont renvoyés dans un entête HTTP (X_REST_DEBOGAGE_MESSAGES) à la fin de l'execution du programme.
* - Autre valeur : les messages sont formatés puis retournés par la fonction de débogage (à vous de les afficher).
*/
public static function gererErreurs() {
if (Config::get('fw_debogage') && GestionnaireException::getExceptionsNbre() > 0) {
if ($this->debogageActivation && GestionnaireException::getExceptionsNbre() > 0) {
$exceptionsTriees = GestionnaireException::getExceptionsTriees();
reset($exceptionsTriees);
$debogageSeulement = true;
if (! (count($exceptionsTriees) == 1 && key($exceptionsTriees) == E_USER_NOTICE)) {
self::envoyerEnteteStatutHttp(self::HTTP_CODE_ERREUR);
$debogageSeulement = false;
}
$exceptionsFormatees = array();
foreach ($exceptionsTriees as $exceptions) {
foreach ($exceptions as $e) {
echo GestionnaireException::formaterExceptionXhtml($e);
if ($debogageSeulement && $this->debogageMode == Debug::MODE_ENTETE_HTTP) {
$exceptionsFormatees[] = GestionnaireException::formaterExceptionTxt($e);
} else {
echo GestionnaireException::formaterExceptionXhtml($e);
}
}
}
if ($debogageSeulement && $this->debogageMode == Debug::MODE_ENTETE_HTTP) {
header('X_REST_DEBOGAGE_MESSAGES: '.json_encode($exceptionsFormatees));
}
}
}
}