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 相关文章推荐
用IE远程创建Mysql数据库的简易程序
Oct 09 PHP
php 从数据库提取二进制图片的处理代码
Sep 09 PHP
Trying to clone an uncloneable object of class Imagic的解决方法
Jan 11 PHP
php中echo()和print()、require()和include()等易混淆函数的区别
Feb 22 PHP
php遍历文件夹和文件列表示例分享
Mar 11 PHP
30个php操作redis常用方法代码例子
Jul 05 PHP
php密码生成类实例
Sep 24 PHP
ThinkPHP中I(),U(),$this->post()等函数用法
Nov 22 PHP
php中ltrim()、rtrim()与trim()删除字符空格实例
Nov 25 PHP
php基于GD库画五星红旗的方法
Feb 24 PHP
搭建自己的PHP MVC框架详解
Aug 16 PHP
PHP中的异常处理机制深入讲解
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
FCKeditor的安装(PHP)
2007/01/13 PHP
php curl模拟post请求小实例
2013/11/13 PHP
discuz加密解密函数使用方法和中文注释
2014/01/21 PHP
Visual Studio中的jQuery智能提示设置方法
2010/03/27 Javascript
jquery单行文字向上滚动效果示例
2014/03/06 Javascript
js控制容器隐藏出现防止样式变化的两种方法
2014/04/25 Javascript
jQuery常用且重要方法汇总
2015/07/13 Javascript
jQuery右下角旋转环状菜单特效代码
2015/08/10 Javascript
js实现文本框支持加减运算的方法
2015/08/19 Javascript
jQuery结合CSS制作动态的下拉菜单
2015/10/27 Javascript
谈谈我对JavaScript DOM事件的理解
2015/12/18 Javascript
JavaScript里 ==与===区别详解
2016/08/16 Javascript
Javascript实现汉字和拼音互转的终极方案
2016/10/19 Javascript
js倒计时小实例(多次定时)
2016/12/08 Javascript
layer实现弹窗提交信息
2016/12/12 Javascript
Vue系列:通过vue-router如何传递参数示例
2017/01/16 Javascript
基于DOM节点删除之empty和remove的区别(详解)
2017/09/11 Javascript
Bootstrap图片轮播效果详解
2017/10/17 Javascript
canvas绘制爱心的几种方法总结(推荐)
2017/10/31 Javascript
vue点击input弹出带搜索键盘并监听该元素的方法
2018/08/25 Javascript
讲解python参数和作用域的使用
2013/11/01 Python
Python复制Word内容并使用格式设字体与大小实例代码
2018/01/22 Python
Python下载网络文本数据到本地内存的四种实现方法示例
2018/02/05 Python
python 对类的成员函数开启线程的方法
2019/01/22 Python
Python Selenium 设置元素等待的三种方式
2020/03/18 Python
时尚的CSS3进度条效果
2012/02/22 HTML / CSS
德国家具在线:Fashion For Home
2017/03/11 全球购物
英国足球店:UK Soccer Shop
2017/11/19 全球购物
洛杉矶时尚女装系列:J.ING US
2019/03/17 全球购物
开水果连锁店创业计划书
2013/12/29 职场文书
个性与发展自我评价
2014/02/11 职场文书
应届生自荐信
2014/06/30 职场文书
2014年行政后勤工作总结
2014/12/06 职场文书
2016年“5.12”护士节慰问信
2015/11/30 职场文书
《自己去吧》教学反思
2016/02/16 职场文书
2016年党员干部廉政承诺书
2016/03/24 职场文书