如何在 Laravel 5 中设置自定义异常处理程序?

Dha*_*han 5 php exception laravel laravel-5

您好,我是 Laravel 的新手,正在使用自定义异常处理。

我已经捕获了据我所知的所有异常,并且工作正常。根据我的理解,set_exception_handler用于处理未捕获的异常。现在我有两个问题:

1)我必须知道我的理解是否set_exception_handler正确。

2)如何在laravel 5中实现处理未捕获的异常

set_exception_handler这就是我在控制器中实现的方式

class SearchController extends BaseController{

    public function getTitleMessage($exc){
        var_dump("set exception handler".$exc);
        return json_encode("Error");
    }

    public function genericSearch(){
       //Bussiness logic goes here

        set_exception_handler('getTitleMessage');
        throw new Exception("Search Failed");
    }
Run Code Online (Sandbox Code Playgroud)

set_exception_handler这显示了一个不是有效回调的错误。所以我将代码更改为

set_exception_handler(array($this,'getTitleMessage'));
Run Code Online (Sandbox Code Playgroud)

但也不适合我。有人指导我如何在 laravel 控制器中实现它。提前致谢

Mop*_*ppo 2

Laravel 已经使用了全局异常处理程序

看一下vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\HandleExceptions.php文件;正如您在bootstrap方法中看到的,Laravel 已经使用set_exception_handler将该方法设置handleException为全局异常处理程序

App\Exceptions\Handler::render当引发未捕获的异常时,该方法最终将被调用。

因此,如果您想以某种方式处理未手动捕获的异常,您所要做的就是将代码添加到该render方法中:

应用程序\异常\Handler.php

public function render($request, Exception $e)
{
    //DO WATHEVER YOU WANT WITH $e

    return parent::render($request, $e);
}
Run Code Online (Sandbox Code Playgroud)