Laravel 5中的API异常

Rob*_*bok 5 php exception-handling exception laravel laravel-5

我想Exception从我的一个控制器(或将来在几个控制器中)捕获所有普通的异常(类的实例)来统一它们的行为.我知道如何在Exceptions/Handler.php中为异常创建全局处理程序,但是如何将它们限制为某个特定的控制器呢?

我想要做的是在我的API控制器中抛出Exception时以JSON格式返回这样的数组:

[
    'error' => 'Internal error occurred.'
]
Run Code Online (Sandbox Code Playgroud)

我可能决定抛出自己的异常类,ApiException但我也希望提供第三方异常,例如数据库错误.

我应该直接将一些值传递给请求对象吗?如果是这样,怎么样?或许还有另一种方式?

Nee*_*ule 3

如果要为特定控制器呈现不同类型的异常,可以使用请求对象来检查当前控制器:

异常/Handler.php

public function render($request, Exception $e)
{
    if($request->route()->getAction()["controller"] == "App\Http\Controllers\ApiController@index"){
        return response()->json(["error" => "An internal error occured"]);
    }
    return parent::render($request, $e);
}
Run Code Online (Sandbox Code Playgroud)