Dans le noyau Joomla, je trouve encore de nombreux appels comme celui-ci:
// Check for errors.
if (count($errors = $this->get('Errors')))
{
JError::raiseError(500, implode("\n", $errors));
return false;
}
Mais JError est obsolète depuis la version 12.1 de la plateforme. Alors, comment dois-je utiliser les exceptions PHP standard.
php
error-handling
jerror
Harald Leithner
la source
la source
Réponses:
Comme l'a dit @DmitryRekun, une bonne discussion est ici . L'élément clé à considérer dans tout cela est quel type d'erreur avez-vous?
Il existe deux types d'erreurs:
La différence que j'ai tendance à résumer comme suit:
Maintenant que nous savons de quoi il s'agit. Que devrais tu faire?
Si l'erreur est irrécupérable, vous souhaitez les rediriger vers une page d'erreur au lieu de continuer sur la page demandée . C'est aussi simple que ce qui suit:
Exception
est une classe qui prend deux paramètres, un message et un code. Il est recommandé d'essayer d'utiliser les codes de réponse HTTP s'ils correspondent à votre scénario.Si l'erreur est récupérable, vous souhaiterez probablement simplement afficher un message à l'utilisateur final tout en lui montrant la page demandée. Cela signifie généralement que vous devez mettre en file d'attente un message pour l'application:
enqueueMessage
prend deux paramètres, le message d'erreur et un type de message. Plus d'infos ici (en bas).Il y a aussi une troisième situation qui se produit assez souvent pour moi au moins. Joomla lèvera des exceptions pour différentes erreurs (comme une erreur de requête de base de données). Cela signifie que Joomla pense que cette erreur est irrécupérable. Cependant, vous voudrez peut-être continuer de toute façon. (Par exemple, si je modifie une table lors de la mise à jour de mon extension, je peux simplement exécuter la
ALTER
requête, qui lèvera une exception si la table a déjà été modifiée.)Dans ce cas, vous voulez encapsuler le code qui pourrait lever une exception dans une section try ... catch:
Notez que ce que vous faites consiste à "détecter" l'erreur irrécupérable et à forcer le système à récupérer et à continuer d'afficher la page demandée.
Ajoutez tout cela et votre cas devrait être une erreur irrécupérable. (Je le sais parce que vous avez 'retourné faux' par la suite, vous n'avez donc probablement pas l'intention de continuer et abandonnez la fonction.)
Ainsi, je réécrirais ceci comme suit:
la source
$this->get('Errors')
car il est également obsolète.JDEBUG
c'est le castrue
.Voici comment je gère une erreur.
Vue ou contrôleur
Donc, si je reçois un code 404 de mon modèle (par exemple):
Ensuite, je l'attrape dans la vue ou le contrôleur et jette une autre exception que Joomla gérera et affichera la page 404. Pour tout autre, je montre simplement un message d'erreur générique à l'utilisateur.
Lisez également cette discussion intéressante sur la gestion des erreurs.
la source
La plupart des blocs de code comme celui-ci peuvent simplement être remplacés
enqueueMessage
car ils n'agissent pas réellement sur l'erreur et les utilisent simplementJError
pour les imprimer.la source