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 相关文章推荐
二十行语句实现从Excel到mysql的转化
Oct 09 PHP
PHP中通过ADO调用Access数据库的方法测试不通过
Dec 31 PHP
PHP+MYSQL 出现乱码的解决方法
Aug 08 PHP
php error_log 函数的使用
Apr 13 PHP
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
Oct 14 PHP
跟我学Laravel之请求与输入
Oct 15 PHP
PHP SOCKET编程详解
May 22 PHP
浅谈PHPANALYSIS提取关键字
Mar 08 PHP
PHP-FPM的配置与优化讲解
Mar 15 PHP
PHP创建对象的六种方式实例总结
Jun 27 PHP
Yii框架的redis命令使用方法简单示例
Oct 15 PHP
PHP论坛实现积分系统的思路代码详解
Jun 01 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+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
2012/07/15 PHP
深入理解PHP内核(一)
2015/11/10 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
2016/07/13 PHP
微信公众平台开发-微信服务器IP接口实例(含源码)
2017/03/05 PHP
php微信公众号开发之翻页查询
2018/10/20 PHP
对JavaScript的eval()中使用函数的进一步讨论
2008/07/26 Javascript
老鱼 浅谈javascript面向对象编程
2010/03/04 Javascript
基于jquery的当鼠标滚轮到最底端继续加载新数据思路分享(多用于微博、空间、论坛 )
2011/10/10 Javascript
Javascript实现DIV滚动自动滚动到底部的代码
2012/03/01 Javascript
关于jQuery参考实例2.0 用jQuery选择元素
2013/04/07 Javascript
jquery利用ajax调用后台方法实例
2013/08/23 Javascript
jquery实现倒计时效果
2015/12/14 Javascript
jQuery解决$符号命名冲突
2016/06/18 Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
2016/08/16 Javascript
jQuery实现拖动剪裁图片作为头像
2016/12/28 Javascript
微信小程序 封装http请求实例详解
2017/01/16 Javascript
解决URL地址中的中文乱码问题的办法
2017/02/10 Javascript
node.js操作mysql简单实例
2017/05/25 Javascript
vue视图不更新情况详解
2019/05/16 Javascript
JS实现的排列组合算法示例
2019/07/16 Javascript
js、jquery实现列表模糊搜索功能过程解析
2020/03/27 jQuery
Python自动化运维和部署项目工具Fabric使用实例
2016/09/18 Python
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
2017/07/20 Python
对Python中DataFrame按照行遍历的方法
2018/04/08 Python
python之cv2与图像的载入、显示和保存实例
2018/12/05 Python
HTML5中的Web Notification桌面通知功能的实现方法
2019/07/29 HTML / CSS
艺术用品:Arteza
2018/11/25 全球购物
应聘面试自我评价
2014/01/24 职场文书
小学老师对学生的评语
2014/12/29 职场文书
岳庙导游词
2015/02/04 职场文书
大学生社会实践活动总结报告
2015/05/06 职场文书
主题班会开场白
2015/06/01 职场文书
Nginx+Tomcat实现负载均衡、动静分离的原理解析
2021/03/31 Servers
解决golang post文件时Content-Type出现的问题
2021/05/02 Golang
python用海龟绘图写贪吃蛇游戏
2021/06/18 Python
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers