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 相关文章推荐
为php4加入动态flash文件的生成的支持
Oct 09 PHP
如何隐藏你的.php文件
Jan 04 PHP
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
Jul 09 PHP
11个PHP 分页脚本推荐
Aug 15 PHP
php中限制ip段访问、禁止ip提交表单的代码分享
Aug 22 PHP
Thinkphp多文件上传实现方法
Oct 31 PHP
php防止CC攻击代码 php防止网页频繁刷新
Dec 21 PHP
PHP实现支付宝即时到账功能
Dec 21 PHP
php登录超时检测功能实例详解
Mar 21 PHP
PHP开发的微信现金红包功能示例
Jun 29 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
Sep 27 PHP
php面向对象程序设计入门教程
Jun 22 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/13 PHP
PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
2011/11/02 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
2013/06/28 PHP
php strnatcmp()函数的用法总结
2013/11/27 PHP
php使用GD库创建图片缩略图的方法
2015/06/10 PHP
反射调用private方法实践(php、java)
2015/12/21 PHP
javascript 实用的文字链提示框效果
2010/06/30 Javascript
两种方法实现文本框输入内容提示消失
2013/03/17 Javascript
莱鸟介绍window.print()方法
2016/01/06 Javascript
第三章之Bootstrap 表格与按钮功能
2016/04/25 Javascript
js实现点击切换checkbox背景图片的简单实例
2017/05/08 Javascript
H5基于iScroll实现下拉刷新和上拉加载更多
2017/07/18 Javascript
Node.js 的模块知识汇总
2017/08/16 Javascript
js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)
2017/09/19 Javascript
简单理解Vue中的nextTick方法
2018/01/30 Javascript
JS正则表达式常见用法实例详解
2018/06/19 Javascript
JavaScript引用类型Array实例分析
2018/07/24 Javascript
如何利用ES6进行Promise封装总结
2019/02/11 Javascript
Vue3.0结合bootstrap创建多页面应用
2019/05/28 Javascript
基于ssm框架实现layui分页效果
2019/07/27 Javascript
跟老齐学Python之list和str比较
2014/09/20 Python
python实现zabbix发送短信脚本
2018/09/17 Python
python实现kmp算法的实例代码
2019/04/03 Python
Python闭包与装饰器原理及实例解析
2020/04/30 Python
Python脚本实现监听服务器的思路代码详解
2020/05/28 Python
CSS3的Border-radius轻松制作圆角
2012/12/24 HTML / CSS
纯css3实现的鼠标悬停动画按钮
2014/12/23 HTML / CSS
官方授权图形T恤和服装:Fifth Sun
2019/06/12 全球购物
会计应届生的自荐信
2013/12/13 职场文书
春节联欢晚会主持词
2014/03/24 职场文书
年度评优评先方案
2014/06/03 职场文书
论文评审意见
2015/06/05 职场文书
《家庭教育》读后感3篇
2019/12/18 职场文书
SQL Server使用导出向导功能
2022/04/08 SQL Server
python playwrigh框架入门安装使用
2022/07/23 Python
Python创建SQL数据库流程逐步讲解
2022/09/23 Python