laravel中有关异常处理的问题

在laravel中 所有的异常处理都由  App\Exceptions\Handler   这个类库来处理,该类包含两个方法  report 和 render

下面我来详情描述这两个方法:


report方法

report 方法用于记录异常并将其发送给外部服务如Bugsnag或Sentry, 默认情况下,repost只是将异常传递给异常被记录的基类,当然你也可以按自己的需要记录异常并进行相关处理.

例如,如果你需要以不同方式报告不同类型的异常,可使用php的instanceof 比较操作符.


/**
 * 报告或记录异常
 *
 * This is a great spot to send exceptions to Sentry, Bugsnag, etc.
 *
 * @param  \Exception  $e
 * @return void
 * @translator laravelacademy.org
 */
public function report(Exception $e){
    if ($e instanceof CustomException) {
        //
    }

return parent::report($e);

}


report 辅助函数. 有时候你可能需要报告一个异常并继续处理当前的请求,辅助函数report 允许你使用异常处理器的report方法快速报告一个异常而不会渲染错误页:

public function isValid($value){
    try{
       //Validate the value...
    }catch(Exception $e){
       report($e);
       return false;

} }

render方法

render 方法负责将给定异常转化为发送给浏览器的HTTP响应,默认情况下,异常被传递给为你生成响应的基类.

当然,你也可以按照自己的需要检查异常类型或者返回自定义响应:

/**
 * 将异常渲染到HTTP响应中
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Exception  $e
 * @return \Illuminate\Http\Response
 */
public function render($request, Exception $e){
    if ($e instanceof CustomException) {
        return response()->view('errors.custom', [], 500);
    }

return parent::render($request, $e);

}

当然最好的做法还是直接写一个专门用于处理异常基本类.

日记本

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

赞赏支持
被以下专题收入,发现更多相似内容