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 相关文章推荐
Windows下PHP的任意文件执行漏洞
Oct 09 PHP
我的论坛源代码(三)
Oct 09 PHP
php中显示数组与对象的实现代码
Apr 18 PHP
php class中self,parent,this的区别以及实例介绍
Apr 24 PHP
php禁止直接从浏览器输入地址访问.php文件的方法
Nov 04 PHP
CI框架扩展系统核心类的方法分析
May 23 PHP
phpstudy默认不支持64位php的解决方法
Feb 20 PHP
PHP Laravel 上传图片、文件等类封装
Aug 16 PHP
使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能示例
Sep 15 PHP
thinkPHP3.2.2框架行为扩展及demo示例
Jun 19 PHP
php5对象复制、clone、浅复制与深复制实例详解
Aug 14 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
Feb 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
在 PHP 中使用随机数的三个步骤
2006/10/09 PHP
PHP自动选择 连接本地还是远程数据库
2010/12/02 PHP
Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明介绍)
2013/07/09 Javascript
动态加载jQuery的方法
2015/06/16 Javascript
浅析Javascript匿名函数与自执行函数
2016/02/06 Javascript
Bootstrap popover用法详解
2016/12/22 Javascript
vue2 前端搜索实现示例
2018/02/26 Javascript
关于JS模块化的知识点分享
2019/10/16 Javascript
vue子传父关于.sync与$emit的实现
2019/11/05 Javascript
小程序卡片切换效果组件wxCardSwiper的实现
2020/02/13 Javascript
Python交换变量
2008/09/06 Python
忘记ftp密码使用python ftplib库暴力破解密码的方法示例
2014/01/22 Python
Python过滤函数filter()使用自定义函数过滤序列实例
2014/08/26 Python
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
python3批量删除豆瓣分组下的好友的实现代码
2016/06/07 Python
Python爬虫:通过关键字爬取百度图片
2017/02/17 Python
python 生成器生成杨辉三角的方法(必看)
2017/04/10 Python
python实现聚类算法原理
2018/02/12 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
2018/07/06 Python
Python使用cx_Freeze库生成msi格式安装文件的方法
2018/07/10 Python
python提取包含关键字的整行数据方法
2018/12/11 Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
2019/05/27 Python
python里dict变成list实例方法
2019/06/26 Python
Django 开发环境与生产环境的区分详解
2019/07/26 Python
Django中Aggregation聚合的基本使用方法
2020/07/09 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
2020/09/18 Python
python常量折叠基础知识点讲解
2021/02/28 Python
详解Django中的FBV和CBV对比分析
2021/03/01 Python
行政助理求职自荐信
2013/10/26 职场文书
经济管理专业毕业生推荐信
2013/11/11 职场文书
计算机个人求职信范例
2014/01/24 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
使用vue-element-admin框架从后端动态获取菜单功能的实现
2021/04/29 Vue.js
【js设计模式】SOLID五大设计原则
2022/03/24 Javascript
mysql的Buffer Pool存储及原理
2022/04/02 MySQL
Java 通过手写分布式雪花SnowFlake生成ID方法详解
2022/04/07 Java/Android