laravel 学习笔记之 错误和异常
错误和异常
laravel 默认配置了一个错误和异常处理类 app\exceptions\handler 用来记录应用程序处罚的所有异常
配置
在 config\app.php 文件的 debug 选项中,开发环境 APP_DEBUG 的值应为 true,生产环境 APP_DEBUG 的值应为 false
异常处理
系统所有的异常都由 app\exceptions\handler 类处理,包含两个方法:report 和 render
report 方法
report 方法将异常信息记录日志,或者发送给第三方异常信息处理服务。如果需要处理不同类型的异常,可以使用 php 的类型运算符 instanceof
public function report(Throwable $exception)
{
if ($exception instanceof CustomException){
//
}
parent::report($exception);
}
不建议在 report 方法中进行太多的 instanceof 检查,应该使用
portable & Renderable 异常
report 辅助函数
report 辅助函数允许你使用异常处理器的 report 方法在不显示错误页面的情况下快速报告异常
render 方法
render 方法将异常信息输出到浏览器展示,默认生成的是响应的基类,也可以根据不同类型的异常返回自定义响应
public function render($request, Throwable $exception)
{
//当抛出一个 CustomException 时,返回 json 格式的 response
if ($exception instanceof CustomException){
return response()->json(['code'=>$exception->getCode(),'msg'=>$exception->getMessage()]);
}
return parent::render($request, $exception);
}
Reportable & Renderable 异常
使用 php artisan make:exception YourException
创建一个自定义异常类 YourException,可以直接在该类中定义 report 和 render 方法,框架会自动调用这些方法
//当抛出一个 CustomException 时,会自动执行 CustomException 类的 render 方法
public function render($request, Throwable $e)
{
return response()->json(['code'=>$e->getCode(),'msg'=>$e->getMessage()]);
}
HTTP 异常
手动抛出异常
abort(404,'page not find');
创建一个 resources/views/errors/404.blade.php 视图文件,由 abort 函数引发的 HttpException 实例将作为 $exception 变量传递给视图
<h2>{{ $exception->getMessage() }}</h2>
使用 vendor:publish Artisan 命令来定义错误模板页面
php artisan vendor:publish --tag=laravel-errors