Joomla 2.5 base de données : getErrorNum() et getErrorMsg() -> deprecated

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • Joomla 2.5 base de données : getErrorNum() et getErrorMsg() -> deprecated

    Bonjour,

    Avec Joomla 1.5, j'avais pour habitude d'afficher les erreurs de base de données (quand elles se produisaient) sur la page et dans un fichier de logs en utilisant getErrorNum() et getErrorMsg().
    Depuis que je développe des composants pour Joomla 2.5, je n'arrive plus à utiliser ces fonctions. Mon fichier de logs contient :
    2012-07-21T15:10:57+00:00 WARNING deprecated JDatabase::getErrorNum() is deprecated, use exception handling instead.
    2012-07-21T15:10:57+00:00 WARNING deprecated JDatabase::getErrorMsg() is deprecated, use exception handling instead.
    Je n'arrive pas à trouve d'exemples de code remplaçant ces deux fonctions sous Joomla 2.5 et je ne trouve pas (ou comprends pas) la documentation expliquant le fonctionnement de "exception handling".

    A toute fin utile, voici un bout de mon code :
    Code PHP:
            $db JFactory::getDBO();
            
    $query='SELECT `id` FROM `#__ezrealty` WHERE `id` NOT IN (SELECT `id` FROM `jos_ezrealty`);';
            
    $db->setQuery$query );
            
    MyLogHelperLog::simpleLog('query='.$db->getQuery());
            
    $db->query();
            if (
    $db->getErrorNum()) 
            {
                
    MyLogHelperLog::simpleLog('Error ' $db->getErrorNum() . ': ' $db->getErrorMsg());
                
    JFactory::getApplication()->enqueueMessagenl2br('Error ' $db->getErrorNum() . ': ' $db->getErrorMsg()),'error' );
            } 
    Quelqu'un peut-il m'aider ?
    Amicalement,
    Jpaul

    http://www.jp-olivier.net/r

  • #2
    Re : Joomla 2.5 base de données : getErrorNum() et getErrorMsg() -> deprecated

    Bonjour,

    Syntaxe PHP standard


    Try {

    le code à tester
    } catch {
    le code erreur à traiter
    }
    Pas de demande de support par MP.
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

    Commentaire


    • #3
      Re : Joomla 2.5 base de données : getErrorNum() et getErrorMsg() -> deprecated

      Bonjour,

      Merci pour ta réponse jisse03.
      J'ai essayé ceci :
      Code PHP:
              Try {
                      
      MyLogHelperLog::simpleLog('Début Try');
                      
      $db JFactory::getDBO();
                      
      $query='SELECT * FROM `table_qui_n_existe_pas` WHERE `id` =55;';
                      
      $db->setQuery$query );
                      
      MyLogHelperLog::simpleLog('query='.$db->getQuery());
                      
      $db->query();
                      
      MyLogHelperLog::simpleLog('Fin Try');
                  }
                  catch (
      JDatabaseException $e)
                  {
                      
      MyLogHelperLog::simpleLog('Début catch JDatabaseException');
                                  
      MyLogHelperLog::simpleLog('Error ' $db->getErrorNum() . ': ' $db->getErrorMsg());
                  
      //                JFactory::getApplication()->enqueueMessage( nl2br('Error ' . $db->getErrorNum() . ': ' . $db->getErrorMsg()),'error' );
                                  
      JFactory::getApplication()->enqueueMessagenl2br('Error db','error' ));
                      
      MyLogHelperLog::simpleLog('Fin catch JDatabaseException');
                  }        
                  catch (
      Exception $e)
                  {
                      
      MyLogHelperLog::simpleLog('Début catch Exception');
                      
      MyLogHelperLog::simpleLog('Fin catch Exception');
                  } 
      et dans mon log je ne retrouve que cela :
      2012-07-22T10:14:15+00:00 INFO - * * * * Début Try
      2012-07-22T10:14:15+00:00 INFO - * * * * query=SELECT * FROM `table_qui_n_existe_pas` WHERE `id` =55;
      2012-07-22T10:14:15+00:00 INFO - * * * * Fin Try
      Je n'ai pas de traces du "Début catch".
      Pourtant, je m'attendais à ce que le fait de faire une requête sur une table n'existant pas provoque une erreur.
      C'est comme si cette erreur n'était pas détectée.

      Et en plus, ça ne me dit pas par quoi remplacer les getErrorNum() et getErrorMsg() qui sont déprecated...

      Et aussi, je pensais que deprecated, ca marchait encore, que ce n'était qu'un warning pour dire attention, un jour, ça ne marchera plus.

      C'est très flou pour moi tout ça, je cherche mais je rame...
      Amicalement,
      Jpaul

      http://www.jp-olivier.net/r

      Commentaire


      • #4
        Re : Joomla 2.5 base de données : getErrorNum() et getErrorMsg() -> deprecated

        Etrange que le catch ne soit pas exécuté sur erreur.

        Et pour le remplacement des Deprecated , $e est l'objet erreur passé au catch.

        Cet objet a une méthode getMessage() qui contient le message d'erreur complètement formaté renvoyé par dans ce cas, MySQL.
        Pas de demande de support par MP.
        S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

        Commentaire


        • #5
          Re : Joomla 2.5 base de données : getErrorNum() et getErrorMsg() -> deprecated

          Ok merci, je m'attendais un peu a devoir remplacer mon $db->getErrorMsg() par un $e->getErrorMsg() mais pour que je fasse ce test, il faudrait que je passe par le catch...

          Je dois faire une erreur grosse comme moi, je continue de chercher. Maintenant que je sais ce que ça devrais faire, je vais me disperser un peu moins.
          Amicalement,
          Jpaul

          http://www.jp-olivier.net/r

          Commentaire


          • #6
            Re : Joomla 2.5 base de données : getErrorNum() et getErrorMsg() -> deprecated

            Bon, je me suis laissé dépasser par tout ça et je me suis perdu sur une fausse piste.
            Si getErrorMsg() et getErrorMsg() tels que je les emploie dans mon code sont "deprecated" ça ne les empêche pas de marcher encore.
            Je ne sais pas ce que j'avais fait dans mon test pour forcer une erreur et constater que ça ne la remontait pas, je viens de refaire un test et ça fonctionne parfaitement :
            Code PHP:
                MyLogHelperLog::simpleLog('Début test');
                    
            $db JFactory::getDBO();
                
            $query='SELECT * FROM `table_qui_n_existe_pas` WHERE `id` =55;';
                
            $db->setQuery$query );
                
            MyLogHelperLog::simpleLog('query='.$db->getQuery());
                
            $db->query();        
                        if (
            $db->getErrorNum())
                        {
                            
            MyLogHelperLog::simpleLog('DB Error');
                            
            MyLogHelperLog::simpleLog($db->getErrorNum());
                            
            MyLogHelperLog::simpleLog($db->getErrorMsg());
                                            
            MyLogHelperLog::simpleLog('Error ' $db->getErrorNum() . ': ' $db->getErrorMsg());
            JFactory::getApplication()->enqueueMessagenl2br('Error ' $db->getErrorNum() . ': ' $db->getErrorMsg()),'error' );
                                    }        
                
            MyLogHelperLog::simpleLog('Fin test'); 
            Me remonte bien une erreur à l'écran et je retrouve bien les lignes tracées dans le code.
            Je pense que le fait d'avoir ce warning (a propos de deprecated concernant getErrorMsg) m'a laisser croire que j'avais une erreur dans ma requête. Toujours est-il que quand j'ai réellement une erreur, j'ai bien l'information qui est remontée (aussi bien dans la page que dans mon log).

            Maintenant, reste à éliminer ces warning à propos de deprecated en utilisant le mécanisme try/catch...
            Et là je n'ai pas encore trouvé ce qui cloche dans mon code. Je me demande s'il n'y a pas quelque chose à initialiser avant d'utiliser le handler d'erreurs....
            Amicalement,
            Jpaul

            http://www.jp-olivier.net/r

            Commentaire


            • #7
              Re : Joomla 2.5 base de données : getErrorNum() et getErrorMsg() -> deprecated

              le warning "Deprecated, il te reste jusqu'à la version 3.5 de Joomla! pour le résoudre


              Personnellement, ayant toujours utilisé la méthode try() .. catch(), je suis à l'aise avec.
              Pas de demande de support par MP.
              S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

              Commentaire


              • #8
                Re : Joomla 2.5 base de données : getErrorNum() et getErrorMsg() -> deprecated

                Ok merci, mais je préférerais éliminer ces messages de warning qui polluent mon fichier log.
                Si tu as un exemple de fonction permettant de remonter les erreurs de base de données en utilisant try() .. catch(), ça pourrait m'aider .
                Amicalement,
                Jpaul

                http://www.jp-olivier.net/r

                Commentaire


                • #9
                  Re : Joomla 2.5 base de données : getErrorNum() et getErrorMsg() -> deprecated

                  En développement, donc avec l emode développeur activé, ces warnings Deprecated sont un peu la norme.

                  Si tu regardes dans libraries, le code de JDatabase possède bien les throw en gestion d'erreur, mais teste si JError::$legacy est true pour conserver le mode actuel et ne pas bloquer les multiples composants qui continuent à utiliser ces métodes "deprecated".

                  Code PHP:
                  abstract class JError
                  {
                      
                  /**
                       * Legacy error handling marker
                       *
                       * @var    boolean  True to enable legacy error handling using JError, false to use exception handling.  This flag
                       *                  is present to allow an easy transition into exception handling for code written against the
                       *                  existing JError API in Joomla.
                       * @since  11.1
                       */
                      
                  public static $legacy false
                  Nativement, on aurait bien un traitement d'erreurs uniquement par les exceptions, mais il suffit qu'un composant, parce que pas encore à jour, passe la variable à true, et c'est tout le système de gestion d'erreurs qui reprend le mode legacy.

                  Ton composant peut parfaitement, à son initialisation, avoir dans son constructeur un
                  Code PHP:
                  JError::$legacy false 
                  ou encore mieuxdéfinir sa propre gestion des exceptions, en n'oubliant pas que JException est également "Deprecated", il vaut meiux utiliser les exceptions natives de PHP, donc extend Exception..
                  Pas de demande de support par MP.
                  S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

                  Commentaire


                  • #10
                    Re : Joomla 2.5 base de données : getErrorNum() et getErrorMsg() -> deprecated

                    Merci jisse03,

                    C'est exactement l'info que je cherchais. J'avais bien vu ce JError::$legacy au cours de mes recherches mais je n'avais pas encore exploré cette piste.
                    En tous cas, tu m'as grandement aidé, il m'aurait fallu passer beaucoup de temps pour arriver à ce résultat tout seul.

                    Je n'ai pas encore saisi comment définir ma propre gestion d'erreurs, je regarderai ça plus tard, là il faut que j'aille bosser.

                    Encore un grand merci.
                    Amicalement,
                    Jpaul

                    http://www.jp-olivier.net/r

                    Commentaire


                    • #11
                      Re : Joomla 2.5 base de données : getErrorNum() et getErrorMsg() -> deprecated

                      Bonjour,

                      Est-on obligé de passer par un try catch à chaque fois ou on peux utiliser seulement throw new Exception() ?
                      Développeur de l'extension Kunena : https://github.com/Kunena/Kunena-Forum

                      Commentaire


                      • #12
                        Re : Joomla 2.5 base de données : getErrorNum() et getErrorMsg() -> deprecated

                        Bonjour,

                        Envoyé par xillibit Voir le message
                        Est-on obligé de passer par un try catch à chaque fois ou on peux utiliser seulement throw new Exception() ?
                        L'utilisation de try catch est recommandée, ne serait-ce que pour sortir avec élégance dans un traitement d'erreur.
                        En se contentant d'un throw sur exception, on aboutit au traitement par défaut de PHP, un laconique message d'erreur et fermeture du script.
                        Pas de demande de support par MP.
                        S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

                        Commentaire


                        • #13
                          Re : Joomla 2.5 base de données : getErrorNum() et getErrorMsg() -> deprecated

                          D'accord, j'utiliserais le couple try catch
                          Développeur de l'extension Kunena : https://github.com/Kunena/Kunena-Forum

                          Commentaire


                          • #14
                            Re : Joomla 2.5 base de données : getErrorNum() et getErrorMsg() -> deprecated

                            Bonsoir,

                            Je veux que mon composant fonctionne sous Joomla! 2.5 et Joomla! 3.0.x, comment faire pour utiliser le couple try catch dans ce cas là ?
                            Développeur de l'extension Kunena : https://github.com/Kunena/Kunena-Forum

                            Commentaire


                            • #15
                              Re : Joomla 2.5 base de données : getErrorNum() et getErrorMsg() -> deprecated

                              Bonjour,

                              En créant pour le composant une classe MonComposantException extends Exception, et en gérant tes exceptions directement depuis cette classe.
                              Pas de demande de support par MP.
                              S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

                              Commentaire

                              Annonce

                              Réduire
                              Aucune annonce pour le moment.

                              Partenaire de l'association

                              Réduire

                              Hébergeur Web PlanetHoster
                              Travaille ...
                              X