Laravel中错误与异常处理的用法示例


Posted in PHP onSeptember 16, 2018

前言

在本文中,我们将探讨 Laravel Web 框架中最重要和最少讨论的功能之一 - 异常处理。 Laravel 带有一个内置的异常处理程序,可以让您轻松地以友好的方式报告和呈现异常。

Laravel 自带错误和异常处理,App\Exceptions\Handler 负责上报异常和如何返回内容,以及未登录的处理。

App\Exceptions\Handler 位于 app\Exceptions\Handler.php,下面介绍这个类的属性和用法。好了,话不多说了,来一起看看详细的介绍吧

忽略异常

在 $dontReport 中可以定义忽略的异常类名:

protected $dontReport = [
 \Illuminate\Auth\AuthenticationException::class,
 \Illuminate\Auth\Access\AuthorizationException::class,
 \Symfony\Component\HttpKernel\Exception\HttpException::class,
 \Illuminate\Database\Eloquent\ModelNotFoundException::class,
 \Illuminate\Validation\ValidationException::class,
];

这些异常就不会经过 report 方法。

几个重要方法

主要介绍这三个方法,report,render 和 unauthenticated 的用法。

report方法

report 方法可以用来记录日志,可以根据不同的异常类型(包括自定义异常类型),如 ClientException,ConnectException 定制不同的日志级别和日志内容。

if ($exception instanceof ABCException) {
 Log::emergency('ABC异常', $context);
} else if ($exception instanceof HeheException) {
 Log::info('Hehe异常', $context);
}

report 方法没有返回值,也不应该在这里中断程序。

render方法

render 方法可以根据不同的异常类型,返回不同的数据。如:

if (get_class($exception) == 'Exception' || $exception instanceof NotAllowedException) {
 return response()->json(['message' => $exception->getMessage()], 400);
} elseif ( $exception instanceof ValidationException) {
 return response()->json(['message' => '校验失败', 'errors'=> $exception->validator->errors()], 400);
}

unauthenticated

在访问需要登录态的页面时,用户未登录就会进入这个方法进行处理,举个例子说明:

protected function unauthenticated($request, AuthenticationException $exception)
{
 if ($request->expectsJson()) {
  return response()->json(['error' => 'Unauthenticated.'], 401);
 }
 
 //如果是后台页面未认证,跳转到后台登陆页面
 $guard = $exception->guards();
 if (in_array('admin', $guard)) {
  return redirect()->guest('/admin/login');
 }
 
 return redirect()->guest('login');
}

如果是返回 json,则统一返回格式。

默认情况下返回前台的登录页,如果是访问后台页面未登录,则跳转到后台登录页。

官方文档

Laravel 5.6

https://laravel-china.org/docs/laravel/5.6/errors/1373

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
十天学会php之第二天
Oct 09 PHP
PHP form 表单传参明细研究
Jul 17 PHP
shopex主机报错误请求解决方案(No such file or directory)
Dec 27 PHP
七款最流行的PHP本地服务器分享
Feb 19 PHP
php简单浏览目录内容的实现代码
Jun 07 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
Jun 29 PHP
分享下PHP register_globals 值为on与off的理解
Sep 26 PHP
Fedora下安装php Redis扩展笔记
Sep 03 PHP
PHP中each与list用法分析
Jan 08 PHP
CodeIgniter辅助之第三方类库third_party用法分析
Jan 20 PHP
PHP编程实现阳历转换为阴历的方法实例
Aug 08 PHP
PHP常量define和const的区别详解
May 18 PHP
laravel获取不到session的三种解决办法【推荐】
Sep 16 #PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
Sep 16 #PHP
thinkphp5引入公共部分header、footer的方法详解
Sep 14 #PHP
PHP中创建和编辑Excel表格的方法
Sep 13 #PHP
PHP通过get方法获得form表单数据方法总结
Sep 12 #PHP
php获取手机端的号码以及ip地址实例代码
Sep 12 #PHP
详解php用static方法的原因
Sep 12 #PHP
You might like
Laravel相关的一些故障解决
2020/08/19 PHP
JavaScript中Object和Function的关系小结
2009/09/26 Javascript
Javascript JSQL,SQL无处不在,
2010/05/05 Javascript
javascript tips提示框组件实现代码
2010/11/19 Javascript
JavaScript中几个重要的属性(this、constructor、prototype)介绍
2013/05/19 Javascript
控制页面按钮在后台执行期间不重复提交的JS方法
2013/06/24 Javascript
jquery实现鼠标拖动图片效果示例代码
2014/01/09 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
2015/12/30 Javascript
基于js里调用函数时,函数名带括号和不带括号的区别
2016/07/28 Javascript
零基础轻松学JavaScript闭包
2016/12/30 Javascript
jQuery命名空间与闭包用法示例
2017/01/12 Javascript
简单的jQuery拖拽排序效果的实现(增强动态)
2017/02/09 Javascript
使用javascript做时间倒数读秒功能的实例
2019/01/23 Javascript
微信小程序自定义导航栏(模板化)
2019/11/15 Javascript
vue 动态组件(component :is) 和 dom元素限制(is)用法说明
2020/09/04 Javascript
Python实现向QQ群成员自动发邮件的方法
2014/11/19 Python
基于python yield机制的异步操作同步化编程模型
2016/03/18 Python
Python数据结构之双向链表的定义与使用方法示例
2018/01/16 Python
Python实现购物车购物小程序
2018/04/18 Python
python版opencv摄像头人脸实时检测方法
2018/08/03 Python
Python异常处理知识点总结
2019/02/18 Python
python离线安装外部依赖包的实现
2020/02/13 Python
Django之富文本(获取内容,设置内容方式)
2020/05/21 Python
什么是Python中的匿名函数
2020/06/02 Python
Python如何实现大型数组运算(使用NumPy)
2020/07/24 Python
安装python依赖包psycopg2来调用postgresql的操作
2021/01/01 Python
匡威英国官网:Converse英国
2018/12/02 全球购物
高级护理专业大学生求职信
2013/10/24 职场文书
秸秆管理实施方案
2014/03/15 职场文书
硕士生找工作求职信
2014/07/05 职场文书
法院执行局工作总结
2015/08/11 职场文书
python编程项目中线上问题排查与解决
2021/11/01 Python
将MySQL的表数据全量导入clichhouse库中
2022/03/21 MySQL
Python 中面向接口编程
2022/05/20 Python
python中 Flask Web 表单的使用方法
2022/05/20 Python
如何利用python创作字符画
2022/06/25 Python