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扩展图文教程
Dec 12 PHP
探讨如何在PHP开启gzip页面压缩实例
Jun 09 PHP
完整删除ecshop中获取店铺信息的API
Dec 24 PHP
分享一则PHP定义函数代码
Feb 26 PHP
Swoole-1.7.22 版本已发布,修复PHP7相关问题
Dec 31 PHP
基于php判断客户端类型
Oct 14 PHP
Yii2配置Nginx伪静态的方法
May 05 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
Dec 21 PHP
零基础php编程好学吗
Oct 11 PHP
Laravel 微信小程序后端搭建步骤详解
Nov 26 PHP
关于PHP中interface的用处详解
Jul 26 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和JavaScript判断请求是否来自微信内浏览器
2015/08/18 PHP
对比分析php中Cookie与Session的异同
2016/02/19 PHP
PHP入门教程之上传文件实例详解
2016/09/11 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
2019/06/22 PHP
javascript import css实例代码
2008/07/18 Javascript
javascript 鼠标拖动图标技术
2010/02/07 Javascript
12个非常有创意的JavaScript小游戏
2010/03/18 Javascript
jquery中checkbox全选失效的解决方法
2014/12/26 Javascript
js实现数组转换成json
2015/06/26 Javascript
JavaScript的jQuery库中ready方法的学习教程
2015/08/14 Javascript
ES6的新特性概览
2016/03/10 Javascript
JS简单循环遍历json数组的方法
2016/04/22 Javascript
JQuery对ASP.NET MVC数据进行更新删除
2016/07/13 Javascript
jQuery插件ajaxFileUpload异步上传文件
2016/10/19 Javascript
js复制内容到剪贴板代码,js复制代码的简单实例
2016/10/27 Javascript
Javascript中的神器——Promise
2017/02/08 Javascript
微信小程序 Nginx环境配置详细介绍
2017/02/14 Javascript
Express框架之connect-flash详解
2017/05/31 Javascript
turn.js异步加载实现翻书效果
2019/07/25 Javascript
vue中使用v-for时为什么不能用index作为key
2020/04/04 Javascript
15个简单的JS编码标准让你的代码更整洁(小结)
2020/07/16 Javascript
[45:38]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第一局
2016/03/02 DOTA
Python命名空间详解
2014/08/18 Python
初步探究Python程序的执行原理
2015/04/11 Python
Python3 中作为一等对象的函数解析
2019/12/11 Python
python正则过滤字母、中文、数字及特殊字符方法详解
2020/02/11 Python
Python集成开发工具Pycharm的安装和使用详解
2020/03/18 Python
Tensorflow加载Vgg预训练模型操作
2020/05/26 Python
波兰最大的儿童服装连锁店之一:5.10.15.
2018/02/11 全球购物
哥德堡通行证:Gothenburg Pass
2019/12/09 全球购物
综合测评自我鉴定
2013/10/08 职场文书
大学生社会实践活动总结报告
2015/05/06 职场文书
python自然语言处理之字典树知识总结
2021/04/25 Python
Python基础之tkinter图形化界面学习
2021/04/29 Python
小程序与后端Java接口交互实现HelloWorld入门
2021/07/09 Java/Android
MySQL创建管理KEY分区
2022/04/13 MySQL