Gestione delle eccezioni in Magento 2


15

In Magento 1 sono stato in grado di rilevare le eccezioni e registrarle nel exception.logfile utilizzandoMage::logException($e);

Ora, in Magento 2, posso catch (\Exception $e)ma cosa devo fare con l'eccezione rilevata? Come accedo al exception.log? O qual è il modo tipico di gestirlo?

Risposte:


20

Il modo più semplice per iniziare a registrare le tue eccezioni sarebbe quello di iniettare Psr\Log\LoggerInterfacenel costruttore della tua classe:

private $logger;

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

E poi nella tua catchdichiarazione:

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

Qualsiasi altra cosa correlata a come reagire dopo che è stata rilevata un'eccezione non dovrebbe essere diversa tra M1 e M2. La tua strategia sarebbe anche molto specifica per il tuo caso d'uso di gestione delle eccezioni.


5
Suggerimento: M2 ha il supporto per passare direttamente l'eccezione: $this->logger->debug($e).
nevvermind

1
In realtà per registrare le eccezioni è necessario utilizzare il critical()metodo invecedebug()
joni jones,

getMessage dovrebbe essere una chiamata di funzione: getMessage ()
LM_Fielding

1
@LM_Fielding Buona cattura, fisso.
brendanWeb

@jonijones Il mio errore, risolto.
brendan Web

7

Magento2 ha diversi tipi di gestori di eccezioni, ad esempio:

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

Eccetera.

Esistono tutti i tipi di gestori e le loro classi \vendor\magento\framework\Exception.

Devi scegliere il gestore Eccezioni pertinente per le tue esigenze e utilizzarlo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.