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 相关文章推荐
提问的智慧(2)
Oct 09 PHP
Breeze 文章管理系统 v1.0.0正式发布
Dec 14 PHP
PHP获取网卡地址的代码
Apr 09 PHP
php 操作数组(合并,拆分,追加,查找,删除等)
Jul 20 PHP
PHP根据IP判断地区名信息的示例代码
Mar 03 PHP
php 解压rar文件及zip文件的方法
May 05 PHP
php+mysqli使用预处理技术进行数据库查询的方法
Jan 28 PHP
PHP的运行机制与原理(底层)
Nov 16 PHP
Yii2框架dropDownList下拉菜单用法实例分析
Jul 18 PHP
php实现登录tplink WR882N获取IP和重启的方法
Jul 20 PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
Feb 05 PHP
PHP用PDO如何封装简单易用的DB类详解
Jul 30 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.ini中添加extension=php_mysqli.dll指令的说明
2007/06/14 PHP
解析phpstorm + xdebug 远程断点调试
2013/06/20 PHP
php计算2个日期的差值函数分享
2015/02/02 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
2015/02/16 PHP
教大家制作简单的php日历
2015/11/17 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
2016/10/25 PHP
php微信开发之关注事件
2018/06/14 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
2019/10/20 PHP
原生javaScript做得动态表格(注释写的很清楚)
2013/12/29 Javascript
jQuery实现表格行上下移动和置顶效果
2015/06/05 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
js正则表达式replace替换变量方法
2016/05/21 Javascript
全面了解js中的script标签
2016/07/04 Javascript
JavaScript动态数量的文件上传控件
2016/11/18 Javascript
jquery实现图片平滑滚动详解
2017/03/22 jQuery
从源码看angular/material2 中 dialog模块的实现方法
2017/10/18 Javascript
如何为vue的项目添加单元测试
2018/12/19 Javascript
[01:32:22]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第一场 2月5日
2021/03/11 DOTA
python和flask中返回JSON数据的方法
2018/03/26 Python
对Python中range()函数和list的比较
2018/04/19 Python
实例讲解Python爬取网页数据
2018/07/08 Python
python实现微信打飞机游戏
2020/03/24 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
2020/04/08 Python
澳大利亚相机之家:Camera House
2017/11/30 全球购物
Hotter Shoes美国官网:英国最受欢迎的舒适鞋
2018/08/02 全球购物
加利福尼亚州威尼斯的女性奢侈品设计师服装和概念店:Mona Moore
2018/09/13 全球购物
英国女装网上商店:I Saw It First
2018/10/18 全球购物
皇家阿尔伯特英国官方商店:Royal Albert骨瓷
2019/03/25 全球购物
校园之星获奖感言
2014/01/29 职场文书
乡镇四风对照检查材料
2014/08/31 职场文书
办公室班子四风问题对照检查材料
2014/10/04 职场文书
主持人大赛开场白
2015/05/29 职场文书
2015质检员个人年终工作总结
2015/10/23 职场文书
用python删除文件夹中的重复图片(图片去重)
2021/05/12 Python
Python的三个重要函数详解
2022/01/18 Python
Mysql多层子查询示例代码(收藏夹案例)
2022/03/31 MySQL