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);
}
当然最好的做法还是直接写一个专门用于处理异常基本类.
这个人暂时没有 freestyle