Obsługa wyjątków w Magento 2

15

W Magento 1 udało mi się złapać wyjątki i zalogować je do exception.logpliku za pomocąMage::logException($e);

Teraz w Magento 2 mogę, catch (\Exception $e)ale co mam zrobić z wychwyconym wyjątkiem? Jak mogę się zalogować do exception.log? Lub jaki jest typowy sposób poradzenia sobie z tym?

Andre Nickatina
źródło

Odpowiedzi:

20

Najprostszym sposobem na rozpoczęcie rejestrowania wyjątków byłoby wstrzyknięcie Psr\Log\LoggerInterfacedo konstruktora klasy:

private $logger;

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

A następnie w twoim catchoświadczeniu:

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

Cokolwiek innego związanego z reakcją po wykryciu wyjątku nie powinno różnić się między M1 i M2. Twoja strategia byłaby również bardzo specyficzna dla przypadku użycia wyjątku obsługi.

brendanWeb
źródło
5
Pro wskazówka: M2 obsługuje bezpośrednio przekazując wyjątek: $this->logger->debug($e).
nevvermind
1
Właściwie, aby rejestrować wyjątki, należy critical()zamiast tego użyć metodydebug()
joni jones
getMessage powinno być wywołaniem funkcji: getMessage ()
LM_Fielding
1
@LM_Fielding Dobry połów, naprawiony.
brendanWeb
@jonijones Mój błąd, naprawiony.
brendanWeb
7

Magento2 ma różne typy procedur obsługi wyjątków, na przykład:

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

Itp.

Wszystkie typy modułów obsługi i ich klasy istnieją w \vendor\magento\framework\Exception.

Musisz wybrać odpowiedni moduł obsługi wyjątków dla swoich wymagań i użyć go.

Amit Bera
źródło