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 相关文章推荐
jq的get传参数在utf-8中乱码问题的解决php版
Jul 23 PHP
php 图片加水印与上传图片加水印php类
May 12 PHP
php中获取远程客户端的真实ip地址的方法
Aug 03 PHP
php变量作用域的深入解析
Jun 03 PHP
PHP的构造方法,析构方法和this关键字详细介绍
Oct 22 PHP
PHP递归复制、移动目录的自定义函数分享
Nov 18 PHP
PHP生成随机字符串(3种方法)
Sep 25 PHP
php 实现301重定向跳转实例代码
Jul 18 PHP
Laravel中服务提供者和门面模式的入门介绍
Nov 06 PHP
实现PHP中session存储及删除变量
Oct 15 PHP
详解PHP素材图片上传、下载功能
Apr 12 PHP
设定php简写功能的方法
Nov 28 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扎实个人基本功
2008/03/27 PHP
php删除文件夹及其文件夹下所有文件的函数代码
2013/01/23 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
2013/06/27 PHP
PHP中使用smarty生成静态文件的例子
2014/04/24 PHP
PHP也能干大事 随机函数
2015/04/14 PHP
php中PDO方式实现数据库的增删改查
2015/05/17 PHP
PHP中PDO连接数据库中各种DNS设置方法小结
2016/05/13 PHP
PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)
2016/09/11 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
List Information About the Binary Files Used by an Application
2007/06/11 Javascript
jquery自适应布局的简单实例
2016/05/28 Javascript
Angular ng-repeat指令实例以及扩展部分
2016/12/26 Javascript
神级程序员JavaScript300行代码搞定汉字转拼音
2017/05/20 Javascript
微信小程序列表渲染功能之列表下拉刷新及上拉加载的实现方法分析
2017/11/27 Javascript
CentOS7中源码编译安装NodeJS的完整步骤
2018/10/13 NodeJs
vue实现多条件和模糊搜索功能
2019/05/28 Javascript
NUXT SSR初级入门笔记(小结)
2019/12/16 Javascript
浅谈vue中$bus的使用和涉及到的问题
2020/07/28 Javascript
[01:03:56]Mineski vs TNC 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
python numpy和list查询其中某个数的个数及定位方法
2018/06/27 Python
使用tensorflow实现矩阵分解方式
2020/02/07 Python
python用pip install时安装失败的一系列问题及解决方法
2020/02/24 Python
Python根据字典的值查询出对应的键的方法
2020/09/30 Python
用sleep间隔进行python反爬虫的实例讲解
2020/11/30 Python
美国大尺码女装零售商:TORRID
2016/10/01 全球购物
全球最大的游戏市场:G2A
2018/07/05 全球购物
气象学专业个人求职信
2014/03/15 职场文书
函授生自我鉴定
2014/03/25 职场文书
关工委先进个人事迹材料
2014/05/23 职场文书
新疆民族团结演讲稿
2014/08/27 职场文书
乡镇组织委员个人整改措施
2014/09/16 职场文书
青年文明号汇报材料
2014/12/23 职场文书
开会通知
2015/04/20 职场文书
安全生产标语口号
2015/12/26 职场文书
MySQL5.7并行复制原理及实现
2021/06/03 MySQL
Java中的Kotlin 内部类原理
2022/06/16 Java/Android