gpt4 book ai didi

php - Laravel 5 覆盖异常处理程序

转载 作者:搜寻专家 更新时间:2023-10-31 21:57:34 24 4
gpt4 key购买 nike

我想知道是否可以在 Laravel 5 中覆盖应用程序异常处理程序类而不将其扩展到另一个类。

也许更好的说法是我希望它不会在出现异常时调用 App\Exceptions\Handler 而是我自己的处理程序之一。

提前致谢。

最佳答案

正如 Digitlimit 之前提到的 here Laravel 附带默认的 ExceptionHandler 可以被覆盖。有两种方法可以做到这一点:

调整实现的ExceptionHandler

Laravel 5.8 在 app/Exceptions/Handler.php 中实现了默认的 ExceptionHandler。此类扩展自 Illuminate\Foundation\Exceptions\Handler,它是 Illuminate\Contracts\Debug\ExceptionHandler 接口(interface)的实际 Laravel 实现。通过删除父类并自己实现接口(interface),您可以执行所有您想要的自定义异常处理。我在回答的末尾包含了 Handler 类的一个小示例实现。

注册一个新的 ExceptionHandler

另一种实现自定义 ExceptionHandler 的方法是覆盖 bootstrap/app.php 中的默认配置。为了覆盖 Larvel 指定的处理程序,只需像这样在默认抽象之后为 Illuminate\Contracts\Debug\ExceptionHandler::class 抽象注册一个单例。

# Laravel default
$app->singleton(
Illuminate\Contracts\Debug\ExceptionHandler::class,
App\Exceptions\Handler::class
);

# My custom handler
$app->singleton(
Illuminate\Contracts\Debug\ExceptionHandler::class,
App\Exceptions\MyHandler::class
);

这样做的结果是在抛出异常时调用 App\Exceptions\MyHandler 并且完全跳过 App\Exceptions\Handler

ExceptionHandler 示例

如果它很有用,我已经包含了一个自定义 ExceptionHandler 的小示例,以给出它的可能性的全局概念。

namespace App\Exceptions;

use Exception;
use Illuminate\Contracts\Debug\ExceptionHandler;
use Illuminate\Support\Facades\Log;
use Symfony\Component\Console\Application;

class Handler implements ExceptionHandler
{
public function report(Exception $e)
{
Log::debug($e->getMessage());
}

public function shouldReport(Exception $e)
{
return true;
}

public function render($request, Exception $e)
{
return view('error.page');
}

public function renderForConsole($output, Exception $e)
{
(new Application)->renderException($e, $output);
}
}

关于php - Laravel 5 覆盖异常处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31935182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com