Ausnahmebehandlung in Magento 2


15

In Magento 1 konnte ich Ausnahmen abfangen und mit in die exception.logDatei einloggenMage::logException($e);

Nun, in Magento 2 kann ich catch (\Exception $e)aber was mache ich mit der gefangenen Ausnahme? Wie melde ich mich an exception.log? Oder wie geht man normalerweise damit um?

Antworten:


18

Der einfachste Weg, um Ihre Ausnahmen zu protokollieren, ist das Einfügen Psr\Log\LoggerInterfacein den Konstruktor Ihrer Klasse:

private $logger;

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

Und dann in deiner catchAussage:

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

Alles andere, was mit der Reaktion nach dem Erkennen einer Ausnahme zu tun hat, sollte zwischen M1 und M2 nicht anders sein. Ihre Strategie wäre auch sehr spezifisch für Ihren Anwendungsfall der Ausnahmebehandlung.


5
Pro - Tipp: M2 hat die Unterstützung für die Ausnahme direkt vorbei: $this->logger->debug($e).
Nevvermind

1
critical()debug()
Um

getMessage sollte ein Funktionsaufruf sein: getMessage ()
LM_Fielding

1
@LM_Fielding Guter Fang, behoben.
brendanWeb

@jonijones Mein Fehler behoben.
brendanWeb

6

Magento2 hat verschiedene Arten von Exception-Handlern, zum Beispiel:

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

Etc.

Alle Handlertypen und ihre Klassen existieren in \vendor\magento\framework\Exception.

Sie müssen den entsprechenden Ausnahmebehandler für Ihre Anforderungen auswählen und diesen verwenden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.