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 相关文章推荐
Win下如何安装PHP的APC拓展
Aug 07 PHP
php用正则表达式匹配URL的简单方法
Nov 12 PHP
一个php短网址的生成代码(仿微博短网址)
May 07 PHP
ThinkPHP实现批量删除数据的代码实例
Jul 02 PHP
PHP模块memcached使用指南
Dec 08 PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
Mar 24 PHP
PHP使用strtotime获取上个月、下个月、本月的日期
Dec 30 PHP
PHP HTTP 认证实例详解
Nov 03 PHP
php生成网页桌面快捷方式
May 05 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
Jun 04 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 PHP
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
Apr 01 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
《Pokemon Sword·Shield》系列WEB动画《薄明之翼》第2话声优阵容公开!
2020/03/06 日漫
PHP 高手之路(三)
2006/10/09 PHP
destoon首页调用求购供应信息的地区名称的方法
2014/08/21 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
2019/03/25 PHP
Js 时间间隔计算的函数(间隔天数)
2011/11/15 Javascript
js比较和逻辑运算符的介绍
2013/03/10 Javascript
jquery实现的鼠标拖动排序Li或Table
2014/05/04 Javascript
javascript使用prototype完成单继承
2014/12/24 Javascript
15个常用的jquery代码片段
2015/12/19 Javascript
ECharts仪表盘实例代码(附源码下载)
2016/02/18 Javascript
jQuery实现下拉框左右移动(全部移动,已选移动)
2016/04/15 Javascript
深入理解JavaScript 函数
2016/06/06 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
2017/06/13 Javascript
input 标签实现输入框带提示文字效果(两种方法)
2017/10/09 Javascript
ionic4+angular7+cordova上传图片功能的实例代码
2019/06/19 Javascript
Vue组件通信入门之Provide和Inject机制
2019/12/29 Javascript
js回到页面指定位置的三种方式
2020/12/17 Javascript
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
python实现猜数字游戏(无重复数字)示例分享
2014/03/29 Python
用于统计项目中代码总行数的Python脚本分享
2015/04/21 Python
python实现查找两个字符串中相同字符并输出的方法
2015/07/11 Python
对命令行模式与python交互模式介绍
2018/05/12 Python
Flask实现图片的上传、下载及展示示例代码
2018/08/03 Python
python斐波那契数列的计算方法
2018/09/27 Python
Python Threading 线程/互斥锁/死锁/GIL锁
2019/07/21 Python
tensor和numpy的互相转换的实现示例
2019/08/02 Python
python笔记_将循环内容在一行输出的方法
2019/08/08 Python
Python使用百度api做人脸对比的方法
2019/08/28 Python
Pymysql实现往表中插入数据过程解析
2020/06/02 Python
浅谈matplotlib默认字体设置探索
2021/02/03 Python
css3新单位vw、vh的使用教程
2018/03/23 HTML / CSS
员工工作表扬信范文
2014/01/13 职场文书
《苏珊的帽子》教学反思
2014/04/07 职场文书
学院党的群众路线教育实践活动第一阶段情况汇报
2014/10/25 职场文书
护士年终考核评语
2014/12/31 职场文书
一波干货,会议主持词开场白范文
2019/05/06 职场文书