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操作Access类(PHP+ODBC+Access)
Jan 02 PHP
php session处理的定制
Mar 16 PHP
PHP安全技术之 实现php基本安全
Sep 04 PHP
php实现批量下载百度云盘文件例子分享
Apr 10 PHP
ThinkPHP实现跨模块调用操作方法概述
Jun 20 PHP
thinkphp微信开发(消息加密解密)
Dec 02 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
Mar 22 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
May 02 PHP
PHP实现上传多图即时显示与即时删除的方法
May 09 PHP
PHP递归遍历文件夹去除注释并压缩php源代码的方法示例
May 23 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
Apr 10 PHP
PHP实现抽奖功能实例代码
Jun 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
一个ORACLE分页程序,挺实用的.
2006/10/09 PHP
php快速url重写更新版[需php 5.30以上]
2010/04/25 PHP
试用php中oci8扩展
2015/06/18 PHP
php自定义函数实现汉字转换utf8编码的方法
2016/09/29 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
jQuery制作仿Mac Lion OS滚动条效果
2015/02/10 Javascript
js+CSS实现模拟华丽的select控件下拉菜单效果
2015/09/01 Javascript
jquery设置表单元素为不可用的简单代码
2016/07/04 Javascript
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
2016/12/15 Javascript
浅述节点的创建及常见功能的实现
2016/12/15 Javascript
BootStrap Table前台和后台分页对JSON格式的要求
2017/06/28 Javascript
select获取下拉框的值 下拉框默认选中方法
2018/02/28 Javascript
vue-cli创建的项目,配置多页面的实现方法
2018/03/15 Javascript
基于Vue 服务端Cookies删除的问题
2018/09/21 Javascript
微信小程序入门之指南针
2020/10/22 Javascript
Antd表格滚动 宽度自适应 不换行的实例
2020/10/27 Javascript
Python三级目录展示的实现方法
2016/09/28 Python
用Python实现KNN分类算法
2017/12/22 Python
Python object类中的特殊方法代码讲解
2020/03/06 Python
python如何构建mock接口服务
2021/01/28 Python
Miller Harris官网:英国小众香水品牌
2020/09/24 全球购物
枚举和一组预处理的#define有什么不同
2016/09/21 面试题
JavaScript实现页面动态验证码的实现示例
2021/03/23 Javascript
小学毕业感言300字
2014/02/19 职场文书
大学自主招生自荐信范文
2014/02/26 职场文书
2014年教学管理工作总结
2014/12/02 职场文书
房产遗嘱范本
2015/08/06 职场文书
学雷锋广播稿大全
2015/08/19 职场文书
大学军训通讯稿(2016最新版)
2015/12/21 职场文书
2016见义勇为事迹材料汇总
2016/03/01 职场文书
高二英语教学反思
2016/03/03 职场文书
六年级作文之自救
2019/12/19 职场文书
Python中基础数据类型 set集合知识点总结
2021/08/02 Python
利用python做数据拟合详情
2021/11/17 Python
Mysql如何查看是否使用到索引
2022/12/24 MySQL