Gestion des exceptions dans Magento 2

15

Dans Magento 1, j'ai pu intercepter des exceptions et les connecter au exception.logfichier en utilisantMage::logException($e);

Maintenant, dans Magento 2, je peux catch (\Exception $e)mais que faire avec l'exception capturée? Comment le connecter au exception.log? Ou quelle est la façon typique de gérer cela?

Andre Nickatina
la source

Réponses:

20

La façon la plus simple de commencer à consigner vos exceptions serait d'injecter le Psr\Log\LoggerInterfacedans le constructeur de votre classe:

private $logger;

public function __construct(\Psr\Log\LoggerInterface $logger)
{
    $this->logger = $logger;
}

Et puis dans votre catchdéclaration:

public function doSomething()
{
    try {
        /* Some logic that could throw an Exception */
    } catch (\Exception $e) {
        $this->logger->critical($e->getMessage());
    }
}

Tout autre élément lié à la façon de réagir après qu'une exception a été interceptée ne devrait pas être différent entre M1 et M2. Votre stratégie serait également très spécifique à votre cas d'utilisation de gestion des exceptions.

brendanWeb
la source
5
Conseil de pro: M2 a un support pour passer directement à l'exception: $this->logger->debug($e).
Nevvermind
1
En fait, pour enregistrer les exceptions, vous devez utiliser la critical()méthode à la placedebug()
joni jones
getMessage doit être un appel de fonction: getMessage ()
LM_Fielding
1
@LM_Fielding Good catch, fixed.
brendanWeb
@jonijones Mon erreur, corrigée.
brendanWeb
7

Magento2 possède différents types de gestionnaires d'exceptions, par exemple:

  • StateException
  • InputException
  • InvalidEmailOrPasswordException
  • MailException
  • NotFoundException
  • ValidatorException

Etc.

Tous les types de gestionnaires et leurs classes existent dans \vendor\magento\framework\Exception.

Vous devez choisir le gestionnaire d'exceptions correspondant à vos besoins et l'utiliser.

Amit Bera
la source