Xử lý ngoại lệ trong Magento 2


15

Trong Magento 1 tôi đã có thể bắt ngoại lệ và đăng nhập chúng vào exception.logtệp bằng cách sử dụngMage::logException($e);

Bây giờ, trong Magento 2, tôi có thể catch (\Exception $e)nhưng tôi phải làm gì với ngoại lệ bị bắt? Làm thế nào để tôi đăng nhập nó vào exception.log? Hoặc cách điển hình để xử lý này là gì?

Câu trả lời:


19

Cách dễ nhất để bắt đầu ghi nhật ký ngoại lệ của bạn là đưa vào hàm Psr\Log\LoggerInterfacetạo của lớp:

private $logger;

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

Và sau đó trong catchtuyên bố của bạn :

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

Bất cứ điều gì khác liên quan đến cách phản ứng sau khi một ngoại lệ đã bị bắt không nên khác biệt giữa M1 và M2. Chiến lược của bạn cũng sẽ rất cụ thể đối với trường hợp sử dụng xử lý ngoại lệ của bạn.


5
Mẹo chuyên nghiệp: M2 có hỗ trợ trực tiếp vượt qua ngoại lệ : $this->logger->debug($e).
đêm

1
Trên thực tế để ghi lại các trường hợp ngoại lệ cần sử dụng critical()phương pháp thay thếdebug()
joni jones

getMessage phải là một hàm gọi: getMessage ()
LM_Fielding

1
@LM_Fielding Bắt tốt, cố định.
brendanWeb

@jonijones Lỗi của tôi, đã sửa.
brendanWeb

7

Magento2 có các loại trình xử lý Ngoại lệ khác nhau, ví dụ:

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

Vân vân.

Tất cả các loại xử lý và các lớp của chúng tồn tại trong \vendor\magento\framework\Exception.

Bạn cần chọn trình xử lý Exception có liên quan cho các yêu cầu của bạn và sử dụng nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.