Обробка винятків у Magento 2


15

У Magento 1 мені вдалося зловити винятки та занести їх у exception.logфайл за допомогоюMage::logException($e);

Тепер у Magento 2 я можу, catch (\Exception $e)але що робити з винятковим винятком? Як я можу ввійти в файл exception.log? Або який типовий спосіб впоратися з цим?

Відповіді:


20

Найпростіший спосіб розпочати реєстрацію своїх винятків - ввести Psr\Log\LoggerInterfaceконструктор класу у ваш клас:

private $logger;

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

А потім у своїй catchзаяві:

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

Все, що стосується того, як реагувати після вилучення винятку, не повинно відрізнятися між M1 та M2. Ваша стратегія також буде дуже специфічною для вашої справи щодо використання виключень.


5
Pro рада: M2 підтримує безпосередньо пропускання виключення: $this->logger->debug($e).
nevvermind

1
Насправді для реєстрації винятків потрібно використовувати critical()метод замість цьогоdebug()
joni jones

getMessage має бути викликом функції: getMessage ()
LM_Fielding

1
@LM_Fielding Хороший улов, виправлений.
brendanWeb

@jonijones Моя помилка, виправлена.
brendanWeb

7

Magento2 має різні типи обробників винятків, наприклад:

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

І т.д.

Усі типи обробників та їх класи існують у \vendor\magento\framework\Exception.

Вам потрібно вибрати відповідний обробник винятків для ваших вимог і використовувати його.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.