Question

Toutes les méthodes suivantes sont utilisées dans le noyau Magento de sorte que l'on est le meilleur moyen (ou le dernier « meilleures pratiques »)?

  • Mage::throwException('Some Message') - 732 Usages
  • throw new Exception('Some Message') - 419 Usages
  • throw Mage::exception('Vendor_Module', 'Some Message') - 94 Usages (nécessité de créer une classe Vendor_Module_Exception)
Était-ce utile?

La solution

Le Mage::throwException d'appel est utilisé pour lancer des exceptions de la variété Mage_Core_Exception spécifique. Ceux-ci sont généralement utilisés pour présenter des messages d'erreur à l'utilisateur final. Pour des exemples, faire une recherche rapide pour Mage::throwException dans le module Mage_Checkout, vous trouverez de nombreux cas où le message d'erreur est effectivement traduit avant qu'il ne soit jeté, car il est en fin de compte va être ajoutée à l'objet de la session et affiché à l'utilisateur sur la page résultante.

Utilisation new Exception ou quelque chose comme new My_Custom_Exception serait normalement lorsque vous jetez des erreurs internes à l'application, les erreurs qui à l'utilisateur final le plus probable ne devrait jamais être affiché. Peut-être que vous attrapez ces derniers et les gérer avec élégance (bon usage pour un type d'exception personnalisée dans certains cas), ou d'autres fois ils finissent à prendre, connecté et mettre fin à la demande avec un message d'erreur plus générique affiché à l'utilisateur.

Je ne l'ai jamais utilisé personnellement Mage::exception mais il semble être une tentative de motif ayant un type d'exception unique pour chaque module. Il n'y aurait pas de mal à l'utiliser, car il est essentiellement une usine qui renvoie une instance d'exception pour le module donné, bien que (au moment de cette écriture), il ne met pas en œuvre un soutien pour des choses telles dérogations.

Autres conseils

Vous avez fait le plus dur, savoir à quelle fréquence ils sont utilisés:)

tl; dr: à mon humble avis, vous devez utiliser Mage::throwException le plus souvent, de retomber à Mage::exception lorsque vous devez soulever un type d'exception à l'extérieur de la portée de votre module, si pour aucune autre raison que la capacité de messagerie de session et le fait que vous n'avez pas à taper throw new devant elle.

Voici la répartition:

  • Mage::throwException est essentiellement une enveloppe pour Mage_Core_Exception($message) avec la fonctionnalité supplémentaire de pouvoir ajouter l'exception à une session via un appel chaîné getSingleton avec addMessage
  • new Exception() est le moyen PHP de base pour lancer une exception, mais vous oblige à utiliser le mot-clé throw et est probablement le moindre grand plus « performant » que les deux autres sont des emballages avec des fonctionnalités supplémentaires.
  • Comme mentionné précédemment, Mage::exception est un emballage aussi bien, mais a l'avantage de vous permettre d'instancier votre propre classe d'exception. Ceci est très utile si vous êtes un développeur de plug-in et le besoin de faire des journaux personnalisés pour les exceptions, séparément, sans la fonctionnalité logException offre (par exemple, pas trac de la pile) ou si vous voulez faire un appel d'API sur exception, etc. Il est également à portée de main lorsque vous voulez throw une exception d'un type de classe différente, par exemple, ce qui se passe dans Mage_Paypal, soulevant souvent un type d'exception Mage_Core.
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top