IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Gestion des erreurs et exceptions et MVC [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut Gestion des erreurs et exceptions et MVC
    Salut à tous

    Je rencontre un problème concernant la gestions des erreurs et des exceptions dans une structure MVC, et particulièrement au niveau des vues.

    Pour résumer un peu la situation, et déjà voir si j'ai bien compris tout ça.
    J'ai une classe "core", (donc général) qui contient entre autre ceci : (en simplifié)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    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 (error_reporting() & $code) {
            throw new ErrorException($error, $code, 0, $file, $line);
        }
        return TRUE;
    }
    Donc toutes les erreurs php sont considérées comme des exceptions.
    Puis si j'ai bien compris ceci, la méthode Runfw::exceptionHandler() est en quelque sorte le dernier recourt pour toutes exceptions qui ne seraient pas attrapées (catchées), en amont.


    Au niveau des chargements des vue (classe View), je procède comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    public static function capture($vue_filename, array $vue_data = NULL) {
        if (!empty($vue_data)) extract($vue_data, EXTR_SKIP);
     
        ob_start();
     
        try {
            include($vue_filename);
        }
        catch (Exception $e) {
            Runfw_Exception::quick($e->getMessage(), $e->getCode(), $e->getFile(), $e->getLine(), $e->getTrace());
        }
        // Retourne la capture de sortie et vide le buffer
        return ob_get_clean();
    }
    Ce qui m'agace (un peu beaucoup), c'est que, si par exemple j'ai une variable non déclarée par exemple dans une vue, le code HTML généré n'est plus complet, le résultat visuel part en sucette, et ça arrive de ne pas percevoir l'erreur, à part regarder/éplucher dans le code générer.
    Pas franchement pratique coté débug.


    Je me dis qu'il serait pas mal de ne pas renvoyer (echo) de suite l'erreur, mais pourquoi pas les stocker au fur et à mesure que les vues se chargent, et à la fin afficher les éventuelles erreurs.
    Mais avec ce ob_start()/ob_get_clean() je ne vois pas trop comment faire ça, puis j'en sais rien si c'est vraiment pratique.


    Comment feriez vous ça dans un contexte comme celui ci ?
    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]

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    que fait ton Runfw_Exception::quick ?

  3. #3
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    que fait ton Runfw_Exception::quick ?
    J'ai pas mis le code c'est vrai, mais il renvoie le message d'erreur, disons que ça revient en gros à faire un echo $e->getMessage() à la place.


    Mais en résumé le code est comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public static function quick($message, $code, $file, $line, $trace = NULL) {
        self::setException($message, $code, $file, $line, $trace);
        self::setTypeErreur('erreur');
        self::setClassName('Exception');
        self::writeErreur();
        if (IS_DEBUG_EXCEPTION === TRUE) {
            self::afficherErreur();
        }
    }
    Le self::afficherErreur() renvoie le message (un echo).
    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]

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    fais comme ca plutot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ob_start();
     
    try
    {
        include($vue_filename);
    }
    catch (Exception $e)
    {
        ob_clean();
        Runfw_Exception::quick($e->getMessage(), $e->getCode(), $e->getFile(), $e->getLine(), $e->getTrace());
    }
     
    // Retourne la capture de sortie et vide le buffer
    return ob_get_clean();

  5. #5
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Je viens d'essayer ... Excellent.

    Franchement, merci, parce que là, je n'y aurais pas pensé.
    Vraiment parfait
    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]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gestion des erreurs (type Exception java) sur un tMap
    Par gavelin dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 31/01/2011, 10h25
  2. Gestion des erreurs et des exceptions en programmation Win32
    Par masterx_goldman dans le forum Windows
    Réponses: 1
    Dernier message: 05/05/2010, 20h35
  3. [.Net MVC]ViewModel Pattern et gestion des erreurs
    Par manu11 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 17/01/2010, 22h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo