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的FTP学习(一)
Oct 09 PHP
php+mysql实现无限级分类 | 树型显示分类关系
Nov 19 PHP
PHP编程中字符串处理的5个技巧小结
Nov 13 PHP
php debug 安装技巧
Apr 30 PHP
深入php-fpm的两种进程管理模式详解
Jun 03 PHP
php提取字符串中网站url地址的方法
Dec 03 PHP
php中分页及SqlHelper类用法实例
Jan 12 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
Aug 17 PHP
PHP工厂模式的日常使用
Mar 20 PHP
PHP压缩图片功能的介绍
Mar 21 PHP
php中array_fill函数的实例用法
Mar 02 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
javascript 嵌套的函数(作用域链)
2010/03/15 Javascript
让mayfish支持mysqli数据库驱动的实现方法
2010/05/22 Javascript
jquery lazyload延迟加载技术的实现原理分析
2011/01/24 Javascript
向当前style sheet中插入一个新的style实现方法
2013/04/01 Javascript
JavaScript instanceof 的使用方法示例介绍
2013/10/23 Javascript
js设置组合快捷键/tabindex功能的方法
2013/11/21 Javascript
Jquery实现自定义弹窗示例
2014/03/12 Javascript
jQuery中after()方法用法实例
2014/12/25 Javascript
浅谈JSON中stringify 函数、toJosn函数和parse函数
2015/01/26 Javascript
javascript关于继承解析
2016/05/10 Javascript
jquery获取复选框checkbox的值的简单实现方法
2016/05/26 Javascript
JavaScript自学笔记(必看篇)
2016/06/23 Javascript
javascript 常用验证函数总结
2016/06/28 Javascript
js实现上传图片预览方法
2016/10/25 Javascript
js基础之DOM中元素对象的属性方法详解
2016/10/28 Javascript
node.js基于mongodb的搜索分页示例
2017/01/22 Javascript
JS仿淘宝搜索框用户输入事件的实现
2017/06/19 Javascript
vue点击按钮实现简单页面的切换
2020/09/08 Javascript
浅谈Python中函数的参数传递
2016/06/21 Python
Python面向对象编程之继承与多态详解
2018/01/16 Python
python微信公众号开发简单流程
2018/03/23 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
2018/05/02 Python
python简单贪吃蛇开发
2019/01/28 Python
python logging模块书写日志以及日志分割详解
2019/07/22 Python
python+selenium 点击单选框-radio的实现方法
2019/09/03 Python
Python基于数列实现购物车程序过程详解
2020/06/09 Python
英国钻石公司:British Diamond Company
2020/02/16 全球购物
澳洲的UGG雪地靴超级市场:Uggs.com.au
2020/04/06 全球购物
业务员岗位职责
2013/11/16 职场文书
硕士研究生个人求职信
2013/12/04 职场文书
消防器材管理制度
2014/01/28 职场文书
大学生入党积极分子自我评价
2014/09/20 职场文书
离婚协议书怎么写2014
2014/09/30 职场文书
老人节标语大全
2014/10/08 职场文书
JVM入门之类加载与字节码技术(类加载与类的加载器)
2021/06/15 Java/Android
Python使用Beautiful Soup(BS4)库解析HTML和XML
2022/06/05 Python