Subversion Repositories Applications.framework

Compare Revisions

Ignore whitespace Rev 236 → Rev 237

/trunk/framework/config.defaut.ini
21,7 → 21,11
; +------------------------------------------------------------------------------------------------------+
; Débogage
; fw_debogage : Indique si oui ou non on veut afficher le débogage.
; fw_debogage_mode : forme d'affichage des messages de débogage (Debug::MODE_ECHO ou Debug::MODE_NOTICE)
; Indique sous quelle forme les méssages de débogage doivent s'afficher :
; - "php:Debug::MODE_ECHO" : le message est affiché en utilisant echo
; - "php:Debug::MODE_NOTICE" : le message est affiché en utilisant une erreur de type notice
; - "php:Debug::MODE_ENTETE_HTTP" : les messages sont envoyés dans un entête HTTP "X_REST_DEBOGAGE".
; - "Autre valeur" : les messages sont formatés puis retournés par la méthode de débogage utilisée.
; fw_debogage_contexte : Indique si oui ou non on veut afficher le contexte de débogage.
; fw_debogage_niveau : Niveau d'erreur à employer pour le code PHP. Voir le manuel de PHP pour les différents niveaux disponibles.
; fw_benchmark_chrono : Indique si oui ou nom on veut afficher le tableau de chronométrage de l'application. (BENCHMARK)
/trunk/framework/Debug.php
15,15 → 15,28
* @link /doc/framework/
*/
class Debug {
 
/** Paramètrer le fichier de config avec "php:Debug::MODE_ECHO" : les messages sont affichés en utilisant echo au moment
* où ils sont déclenchés dans le code.*/
const MODE_ECHO = 'echo';
/** Paramètrer le fichier de config avec "php: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).*/
const MODE_NOTICE = 'e_user_notice';
/**
* mode de php (cli ou sapi)
*/
/** Paramètrer le fichier de config avec "php: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.
* Surtout utile pour le Serveur REST. */
const MODE_ENTETE_HTTP = 'entete_http';
/** Mode de php (cli ou sapi) */
protected static $mode = null;
 
/** Tableau des noms des paramètres à définir dans le fichier de config car obligatoirement nécessaire à cette classe.*/
private static $parametres_obligatoires = array('fw_debogage', 'fw_debogage_mode');
/**
* Accesseur pour le mode
* @return string le mode de php
124,19 → 137,19
* @return string la chaine de debogage formatée ou bien null si echo
*/
private static function traiterDebogage($mot_cle, $sortie, $echo) {
// Formate le mot-clé
self::verifierParametresConfig(self::$parametres_obligatoires);
$debogage = Config::get('fw_debogage');
$mode = Config::get('fw_debogage_mode');
$mot_cle = self::formaterMotCle($mot_cle);
 
// Traitement de la sortie
$sortie = self::traiterSortieSuivantMode($mot_cle, $sortie);
 
// Affichage et/ou retour
self::verifierParametresConfig();
if (Config::get('fw_debogage') == true) {
if ($echo === true || Config::get('fw_debogage_mode') == self::MODE_ECHO) {
if ($debogage == true) {
if ($echo === true || $mode == self::MODE_ECHO) {
echo $sortie;
return null;
} else if (Config::get('fw_debogage_mode') == self::MODE_NOTICE) {
} else if ($mode == self::MODE_NOTICE || $mode == self::MODE_ENTETE_HTTP) {
trigger_error($sortie, E_USER_NOTICE);
return null;
} else {
173,15 → 186,17
/**
* Vérifie que tous les paramêtres de config nécessaires au fonctionnement de cette classe existe dans les fichiers
* de configurations.
*
* @param array $parametres talbeau des noms des paramètres de la config à verifier.
* @return boolean true si tous les paramétres sont présents sinon false.
*/
private static function verifierParametresConfig() {
public static function verifierParametresConfig(Array $parametres) {
$ok = true;
$parametres = array('fw_debogage', 'fw_debogage_mode');
foreach ($parametres as $param) {
if (is_null(Config::get($param))) {
$classe = get_class();
$m = "L'utilisation de la classe $classe nécessite de définir '$param' dans un fichier de configuration.";
trigger_error($m, E_USER_WARNING);
trigger_error($m, E_USER_ERROR);
$ok = false;
}
}
/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));
}
}
}
}
/trunk/framework/Service.php
18,8 → 18,14
*/
abstract class Service {
/** Objet de connection à la base de données. */
protected $bdd;
public function __construct($config) {
$this->config = $config;
// Connection à la base de données
$this->bdd = $this->connecterPDO();
}
/**