Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/03/2011, 08h05   #1
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 708
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 708
Points : 3 278
Points : 3 278
Par défaut Gestion des erreurs/exceptions pour GD (en POO)

Salut à tous

L'idée que j'ai me semble impossible voir pas affaire, mais je pose quand même la question.

Concernant la gestions des erreurs et exception, elle est pour le moment conçues pour des pages HTML, et ça fonctionne plutôt bien.

Le problème, c'est d'avoir un retour d'erreur, ne serait-ce simpliste lorsqu'il s'agit d'images dynamique avec GD.
Le problème est le même d'ailleurs pour les documents PDF (voir tout documents autre que du html).

J'ai une classe Runfw_Exception qui est dérivée de Exception afin de personnaliser cette gestion des errreurs/exceptions.
Puis coté de mon petit FrameWork maison, au niveau du core (du moteur) ce code (je simplifie) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
// classe Runfw (le core)
 
public function initConfigErrors() {
    set_exception_handler(array('Runfw', 'exceptionHandler'));
    set_error_handler(array('Runfw', 'errorHandler'), E_ALL | E_STRICT);
}
 
public static function errorHandler($code, $error, $file = NULL, $line = NULL, $trace = NULL) {
 
        if ($code) {
            throw new ErrorException($error, $code, 0, $file, $line);
        }
        // Do not execute the PHP error handler
        return TRUE;
}
 
public static function exceptionHandler(Exception $e) {
    $class = get_class($e);
    Runfw_Exception::setException($e->getMessage(), $e->getCode(), $e->getFile(), $e->getLine(), $e->getTrace());
    Runfw_Exception::writeErreur();
    if (IS_DEBUG_EXCEPTION === TRUE) {
        if (is_callable(array($class, 'afficherErreur'))) {
            $class::afficherErreur();
        }
        else {
            Runfw_Exception::afficherErreur();
        }
    }
    return TRUE;
}
Donc toutes Exception sera traitée par la méthode Runfwv::exceptionHandler().
Puis toutes erreurs de Php sera gérée par la méthode Runfw::errorHandler(), qui elle même la renvoie vers un Objet ErrorException, donc devient une exception, qui du coup sera traitée par Runfw::exceptionHandler().

Au niveau de ma classe GdImage (qui une sorte de matrice), je ne vois pas d'autres solution que, qu'en cas d'erreur (ou exception) de générer une image GD afin d'afficher l'erreur, donc en PNG.


Du coup, j'ai créé une classe Runfw_Gd_Exception, et dans cette classe une méthode commune à Runfw_Exception : Runfw_Gd_Exception::afficherErreur().
C'est dans cette méthode ou je génère un PNG contenant le message d'erreur.


Le problème, sans pour autant que ça le soit vraiment car j'ai une solution, je gère les erreur comme ceci :
(dans un code quelconque)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
try {
    // Une erreur
    $truc = $existe_pas;
    // Ou une Exception
    // throw new Exception('quelque chose qui ne va pas.', E_USER_NOTICE);
    //... etc ...
}
catch (Runfw_Gd_Exception $e) {
    //Runfw::exceptionHandler($e);
    throw new Runfw_Gd_Exception($e->getMessage(), $e->getCode(), $e->getPrevious(), $this->width, $this->height);
    exit();
}
catch (ErrorException $e) {
    //Runfw::exceptionHandler($e);
    throw new Runfw_Gd_Exception($e->getMessage(), $e->getCode(), $e->getPrevious(), $this->width, $this->height);
    exit();
}
catch (Exception $e) {
    //Runfw::exceptionHandler($e);
    throw new Runfw_Gd_Exception($e->getMessage(), $e->getCode(), $e->getPrevious(), $this->width, $this->height);
    exit();
}
En faite, habituellement, je fais comme ceci :
Code :
1
2
3
4
5
6
7
 
try {
    $truc = $existe_pas;
}
catch (Exception $e) {
    Runfw::exceptionHandler($e);
}
Et c'est là ma question. (ouf )
J'aurais aimé utilisé ce même code habituel pour catcher/attraper les erreurs, soit Runfw::exceptionHandler($e);
et non : throw new Runfw_Gd_Exception(... etc ...)
En somme, de gérer le cas Html/Gd/Pdf au niveau de Runfw::exceptionHandler(), donc de faire quelque part une alternative pour appeler la méthode afficherErreur selon le type de document.


Ceci me semble impossible car en cas d'erreur ça devient une Exception, et pas une Runfw_GD_Exception. Je perds l'info finalement.
Mais est ce possible ?
Ce n'est pas à faire peut être, c'est farfelu, pas propre, etc ... ?

Si vous avez une idée, sans tomber dans de grandes complexités, je suis preneur.

(désolé pour la longueur, je ne vois pas comment faire plus court).
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 16h09   #2
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 708
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 708
Points : 3 278
Points : 3 278
Mon problème n'a pas l'air de passionner les foules ... c'est la misère.


Bon, je mets résolu quand même car je me suis résolu à utiliser throw new Runfw_Gd_Exception(), tant pis.
Ca fonctionne plutôt bien comme ça.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h26.


 
 
 
 
Partenaires

Hébergement Web