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 验证码实例代码
Jun 01 PHP
php数组函数序列之array_combine() - 数组合并函数使用说明
Oct 29 PHP
一个PHP的QRcode类与大家分享
Nov 13 PHP
PHP5函数小全(分享)
Jun 06 PHP
使用PHP下载CSS文件中的图片的代码
Sep 24 PHP
PHP中的按位与和按位或操作示例
Jan 27 PHP
PHP实现图片压缩的两则实例
Jul 19 PHP
php相对当前文件include其它文件的方法
Mar 13 PHP
php猜单词游戏
Sep 29 PHP
PHP指定截取字符串中的中英文或数字字符的实例分享
Mar 18 PHP
PHP编程获取音频文件时长的方法【基于getid3类】
Apr 20 PHP
PHP常用字符串函数用法实例总结
Jun 04 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
php 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释
2010/03/23 PHP
php导入excel文件到mysql数据库的方法
2015/01/14 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
[转]JS宝典学习笔记
2007/02/07 Javascript
固定背景实现的背景滚动特效示例分享
2013/05/19 Javascript
JQuery $.each遍历JavaScript数组对象实例
2014/09/01 Javascript
JavaScript中对象介绍
2014/12/31 Javascript
Bootstrap使用基础教程详解
2016/09/05 Javascript
基于bootstrap按钮式下拉菜单组件的搜索建议插件
2017/03/25 Javascript
微信小程序 实例开发总结
2017/04/26 Javascript
分析JS单线程异步io回调的特性
2017/12/01 Javascript
微信小程序如何连接Java后台
2019/08/08 Javascript
vue.js 解决v-model让select默认选中不生效的问题
2020/07/28 Javascript
jQuery中getJSON跨域原理的深入讲解
2020/09/02 jQuery
Vue时间轴 vue-light-timeline的用法说明
2020/10/29 Javascript
[00:58]2016年国际邀请赛勇士令状宣传片
2016/06/01 DOTA
Python3中多线程编程的队列运作示例
2015/04/16 Python
Python 基础知识之字符串处理
2017/01/06 Python
PyQt5根据控件Id获取控件对象的方法
2019/06/25 Python
Python 项目转化为so文件实例
2019/12/23 Python
Python基于numpy模块实现回归预测
2020/05/14 Python
HTML5的结构和语义(2):结构
2008/10/17 HTML / CSS
世界上最大的隐形眼镜商店:1-800 Contacts
2018/11/03 全球购物
Ray-Ban雷朋瑞典官方网站:全球领先的太阳眼镜品牌
2019/08/22 全球购物
线程问题:wait()方法是定义在哪个类里面
2015/07/07 面试题
连锁经营管理专业大学生求职信
2013/10/30 职场文书
工作失误检讨书范文大全
2014/01/13 职场文书
遗体告别仪式答谢词
2014/01/23 职场文书
答谢会策划方案
2014/05/12 职场文书
教育实践活动对照检查材料
2014/09/23 职场文书
2015年党支部书记工作总结
2015/05/21 职场文书
《失物招领》教学反思
2016/02/20 职场文书
2019年关于小学生课外阅读情况的分析报告
2019/12/02 职场文书
90行Python代码开发个人云盘应用
2021/04/20 Python
Apache Hudi数据布局黑科技降低一半查询时间
2022/03/31 Servers
Java Lambda表达式常用的函数式接口
2022/04/07 Java/Android