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 en php


Sujet :

Langage PHP

  1. #1
    Membre chevronné

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 576
    Points : 1 989
    Points
    1 989
    Par défaut Gestion des erreurs en php
    Bonjour à tous,

    Pourriez vous m'aider s'il vous plaît?
    Je remarque que dans certains code il-y a rarement des exceptions par exemple pour ce projet laravel https://github.com/bestmomo/laravel5...ree/master/app ou encore la démo symfony exemple avec ce controller https://github.com/symfony/demo/blob...Controller.php la fonction search.

    Ma question est donc quand utiliser les exceptions et les try catch ? Dans le cas de ces projets pourquoi y'en a t-il pas
    Exemple en laravel ou je dois refactorer une fonction ici le try catch est justifier d'après vous?
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     try {
                $pro = $pro::findOrFail();
               $contact = $this->contact->findOrFail($pro->id);
              $templateList = $this->smsRespository->getTemplateList();
     
     
            $form = $this->createForm(ProSmsType::class, null, [
                'action' => $this->getUrlAdminMemberSms($this->request->get('id')),
                'attr' => ['class' => 'form-callback'],
                'sms-template-list' => $templateList
            ]);
     
                   $form->handleRequest($request);
                    if ($form->isValid() && $form->isSubmitted()) {
                        $data = $form->getData();
                        $cellphone = $contact->cellPhone;
                        if (!empty($cellphone)) {
                             event(new ProSmsEvent($pro, $data['sms_template_content']));
                            return redirect('admin::pro::view', ['id' => $pro->id]);
                        } 
                         throw new \Exception("Problème avec le numéro");
     
                    }
            } catch (Exception $e) {
                return response()->json(['messages' => [['title' => 'Erreur : ' . $e->getMessage()]]], 500);
            }
    Merci

  2. #2
    Membre habitué
    Homme Profil pro
    Developpeur
    Inscrit en
    Juillet 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Juillet 2014
    Messages : 102
    Points : 153
    Points
    153
    Par défaut
    Bonjour,
    Les exceptions sont là pour remonter une erreur critique empêchant la bonne exécution du programme.
    Il faut les utiliser sur des bouts de codes sensible et requis pour la suite d'une tâche.

    Ex: Appel à une API externe pour obtenir des datas qui seront utilisées par la suite. Si l'appel API se passe mal alors on renvoie une exception.

    Ce ne sera pas le cas lors d'erreurs de validation de formulaire par exemple.

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Cela dit, tu peux très bien définir tes propres exceptions que seront différentes des Exception de base, et qui te permettront une gestion plus fine. PHP: Exceptions étendues - Manual

    Exemple :
    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
    // on définit une classe pour les erreurs de validation
    class MyValidationException extends Exception {
     
        public function __construct($field, $message, $code = 0, Exception $previous = null) {
     
            // on mémorise le champ
            $this->_field = $field;
            // on construit l'exception de base
            parent::__construct($message, $code, $previous);
        }
     
        public function getMessageWithField() {
            return "Erreur sur le champ {$this->_field} : ".$this->getMessage();
        }
    }
    Et on s'en sert pour les problèmes de validation :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    try {
        $pro = $pro::findOrFail();
        $contact = $this->contact->findOrFail($pro->id);
        $templateList = $this->smsRespository->getTemplateList();
     
     
        $form = $this->createForm(ProSmsType::class, null, [
            'action' => $this->getUrlAdminMemberSms($this->request->get('id')),
            'attr' => ['class' => 'form-callback'],
            'sms-template-list' => $templateList
        ]);
     
        $form->handleRequest($request);
        if ($form->isValid() && $form->isSubmitted()) {
            $data = $form->getData();
            $cellphone = $contact->cellPhone;
            if (!empty($cellphone)) {
                event(new ProSmsEvent($pro, $data['sms_template_content']));
                return redirect('admin::pro::view', ['id' => $pro->id]);
            } 
            throw new \MyValidationException("Numéro", "Le champ doit être renseigné");
     
        } 
    } catch (MyValidationException $e) {
        // traitement particulier pour les erreurs de validation : Erreur 400 (Bad Request)
        return response()->json(['messages' => [['title' => 'Erreur : ' . $e->getMessage()]]], 400);
    } catch (Exception $e) {
        // les autres Exception (genre plantage technique) :  Erreur 500 (Internal Server Error)
        return response()->json(['messages' => [['title' => 'Erreur : ' . $e->getMessage()]]], 500);
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Membre chevronné

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 576
    Points : 1 989
    Points
    1 989
    Par défaut
    Merci pour vos réponses

    Je fais moi même mes exceptions, mais la question c'est quand cela vaut le coup d'être utilisé?
    Après recherche et d'après cette article très petinant https://culttt.com/2014/04/09/use-exception/ et comme dit plus haut c'est pour cause exceptionnel.
    Par exemple dans le code que j'ai donné, le try catch apporte t-il réellement quelque chose? Ici si je n'utilise pas le try catch cela me donne ça:
    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
    16
    17
    18
    19
    20
    21
    22
    23
     public function create(Pro $pro, SmsTemplateRepository $smsRespository, ContactRequest $request)
        {
            $pro = $pro::findOrFail(1, ['cellPhone', 'pro_id']);
            $contact = $this->contact->findOrFail($pro->id);
            $templateList = $this->smsRespository->getTemplateList();
     
     
            $form = $this->createForm(ProSmsType::class, null, [
                'action' => $this->getUrlAdminMemberSms($this->request->get('id')),
                'attr' => ['class' => 'form-callback'],
                'sms-template-list' => $templateList
            ]);
            $form->handleRequest($request);
     
            if ($form->isValid() && $form->isSubmitted()) {
                $data = $form->getData();
                event(new ProSmsEvent($pro, $data['sms_template_content']));
                return redirect('admin::pro::view', ['id' => $pro->id]);
            }
     
            $data = $this->format($pro, $contact);
            return view('admin.pages.builder.sms', ['form' => $form->createView(), 'proId' => $pro->id, 'data' => $data]);
        }
    Dans ce code c'est vraiment pertinent d'utiliser un try catch (c'est du laravel) sachant que finalement on a pas d'accès tier juste des accès en bdd et un event?

    Merci

  5. #5
    Membre chevronné

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 576
    Points : 1 989
    Points
    1 989
    Par défaut
    Je m'auto répond,

    Comme expliqué une exception doit-être exceptionnel et donc une action qui peut ce produire occasionnellement.
    Ici on peut nettoyer le script par exemple avec les findOrFail qui gère l'exception.

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par kevin254kl Voir le message
    Je m'auto répond,

    Comme expliqué une exception doit-être exceptionnel et donc une action qui peut ce produire occasionnellement.
    Heu, c'est très vague comme définition et peut prêter à confusion, gérer des exception ne doit pas être considéré comme exceptionnel, c'est même conseillé comme bonne pratique de développement.

    Citation Envoyé par kevin254kl Voir le message
    Ici on peut nettoyer le script par exemple avec les findOrFail qui gère l'exception.
    ...Mais il est vrai que quand on utilise un framework, la plupart des exceptions sensibles sont déjà gérées en interne et dans ce cas il est inutile de les doubler. Cela dit en cas de doute, mieux vaut doubler cette gestion des exceptions que de n'en avoir aucune, car la non gestion des erreurs peut dans certains cas rendre un code plus vulnérable au piratage.

    Cela permet aussi d'envoyer des messages au visiteur pour lui signaler des erreurs de saisie ou une bdd momentanément indisponible par exemple, plutôt que d'avoir un formulaire qui ne fonctionne pas sans savoir pourquoi. Donc dire que que la gestion des exceptions doit-être exceptionnelle n'est pas une bonne réponse générique.

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

Discussions similaires

  1. [SQL-Server] Gestion des erreurs avec PHP
    Par arthuro45 dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 05/04/2010, 18h21
  2. [php]Gestion des erreurs
    Par petchos dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 15/02/2008, 14h26
  3. [Oracle] [PHP] Gestion des erreurs de connexion
    Par Mimo dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 17/06/2006, 01h17
  4. [PHP-JS] gestion des erreurs sur liste déroulente
    Par HwRZxLc4 dans le forum Langage
    Réponses: 9
    Dernier message: 28/05/2006, 03h21

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