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 相关文章推荐
《APMServ 5.1.2》使用图解
Oct 23 PHP
php获取当前网址url并替换参数或网址的方法
Jun 06 PHP
PHP中设置时区方法小结
Jun 03 PHP
PHP读取大文件的类SplFileObject使用介绍
Apr 09 PHP
php函数与传递参数实例分析
Nov 15 PHP
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
Nov 24 PHP
thinkphp如何获取客户端IP
Nov 03 PHP
php简单复制文件的方法
May 09 PHP
php魔术方法功能与用法实例分析
Oct 19 PHP
php版微信小店API二次开发及使用示例
Nov 12 PHP
PHP并发查询MySQL的实例代码
Aug 09 PHP
基于php解决json_encode中文UNICODE转码问题
Nov 10 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 函数使用方法与函数定义方法
2010/05/09 PHP
使用php统计字符串中中英文字符的个数
2013/06/23 PHP
PHP strtotime函数用法、实现原理和源码分析
2015/02/04 PHP
PHP输入输出流学习笔记
2015/05/12 PHP
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
2016/05/12 PHP
php 一维数组的循环遍历实现代码
2017/04/10 PHP
JS 页面内容搜索,类似于 Ctrl+F功能的实现代码
2007/08/13 Javascript
15个款优秀的 jQuery 图片特效插件推荐
2011/11/21 Javascript
Extjs NumberField后面加单位实现思路
2013/07/30 Javascript
JS实现随机化快速排序的实例代码
2013/08/01 Javascript
js 定时器setTimeout无法调用局部变量的解决办法
2013/11/28 Javascript
jQery使网页在显示器上居中显示适用于任何分辨率
2014/06/09 Javascript
jquery选择器需要注意的问题
2014/11/26 Javascript
微信内置浏览器私有接口WeixinJSBridge介绍
2015/05/25 Javascript
JavaScript获取当前url根目录(路径)
2016/06/17 Javascript
javascript如何创建对象
2016/08/29 Javascript
如何用JS/HTML将时间戳转换为“xx天前”的形式
2017/02/06 Javascript
nodejs制作爬虫实现批量下载图片
2017/05/19 NodeJs
浅谈微信小程序之官方UI框架we-ui使用教程
2018/08/20 Javascript
python学生管理系统
2019/01/30 Python
python itchat实现调用微信接口的第三方模块方法
2019/06/11 Python
pandas分区间,算频率的实例
2019/07/04 Python
10个Python面试常问的问题(小结)
2019/11/20 Python
Tensorflow中的dropout的使用方法
2020/03/13 Python
python的flask框架难学吗
2020/07/31 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
详解python第三方库的安装、PyInstaller库、random库
2021/03/03 Python
Python 调用C++封装的进一步探索交流
2021/03/04 Python
微软日本官方网站:Microsoft日本
2017/11/26 全球购物
美国传奇滑手Paul Rodriguez创办的街头滑板品牌:Primitive Skateboarding
2019/10/29 全球购物
装潢设计实习自我鉴定
2013/09/19 职场文书
房屋公证委托书
2014/04/03 职场文书
六一儿童节标语
2014/10/08 职场文书
2016年小学党支部创先争优活动总结
2016/04/05 职场文书
Python与C++中梯度方向直方图的实现
2022/03/17 Python
Moment的feature导致线上bug解决分析
2022/09/23 Javascript