Laravel 框架返回状态拦截代码


Posted in PHP onOctober 18, 2019

可拦截系统的返回的状态自己在单独处理。

使用查询

composer require betterde/response
// 安装后直接调用以下
# stored
return stored($data, $message = '创建成功');
 
#updated
return updated($data, $message = '更新成功');
 
#deleted
return deleted($message = '删除成功');
 
#accepted
return accepted($message = '请求已接受,等待处理');
 
#notFound
return notFound($message = '您访问的资源不存在');
 
#internalError
return internalError($message = '未知错误导致请求失败');
 
#failed
return failed($message, $code = Response::HTTP_BAD_REQUEST);
 
#success
return success($data);
 
#message
return message($message, $code = Response::HTTP_OK);
 
#respond
return respond($data = [], $message = '请求成功', array $header = []);

拦截代码

App\Exceptions\Handler
<?php
 
namespace App\Exceptions;
 
use Exception;
use Illuminate\Support\Facades\Log;
use Illuminate\Database\QueryException;
use App\Traits\Response\InterfaceResponse;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Validation\ValidationException;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
 
/**
 * 异常处理
 *
 * Date: 21/03/2018
 * @author George
 * @package App\Exceptions
 */
class Handler extends ExceptionHandler
{
	use InterfaceResponse;
 
 /**
  * 定义不需要记录的异常类
  *
  * @var array
  */
 protected $dontReport = [
		HttpException::class,
		ValidationException::class,
		ModelNotFoundException::class,
		AuthorizationException::class,
		AuthenticationException::class,
	];
 
 /**
  * A list of the inputs that are never flashed for validation exceptions.
  *
  * @var array
  */
 protected $dontFlash = [
  'password',
  'password_confirmation',
 ];
 
	/**
	 * 定义需要记录的异常
	 *
	 * Date: 21/03/2018
	 * @author George
	 * @param Exception $exception
	 * @return mixed|void
	 * @throws Exception
	 */
 public function report(Exception $exception)
 {
  parent::report($exception);
 }
 
	/**
	 * 拦截异常并生成对应的响应内容
	 *
	 * Date: 21/03/2018
	 * @author George
	 * @param \Illuminate\Http\Request $request
	 * @param Exception $exception
	 * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
	 */
 public function render($request, Exception $exception)
 {
 	// 拦截数据库操作异常
// 	if ($exception instanceof QueryException) {
// 		Log::error($exception);
// 		return $this->internalError();
//		}
 
		// 拦截一般异常并生成响应
		if ($exception instanceof GeneralException) {
			return failed($exception->getMessage(), $exception->getCode() ?: 500);
		}
 
		// 拦截404异常
		if ($exception instanceof ModelNotFoundException) {
			return $this->notFound();
		}
 
		// 拦截授权异常
		if ($exception instanceof AuthorizationException) {
			return failed('您无权访问', 403);
		}
 
		// 参数验证错误的异常,我们需要返回 400 的 http code 和一句错误信息
		if ($exception instanceof ValidationException) {
			return failed(array_first(array_collapse($exception->errors())), 422);
		}
 
		// 用户认证的异常,我们需要返回 401 的 http code 和错误信息
		if ($exception instanceof UnauthorizedHttpException) {
			return failed('未提供Token', 401);
		}
 
		// 捕获404异常
		if ($exception instanceof NotFoundHttpException) {
 		return $this->notFound();
		}
 
  return parent::render($request, $exception);
 }
 
	/**
	 * 认证失败后抛出异常
	 *
	 * Date: 2018/5/27
	 * @author George
	 * @param \Illuminate\Http\Request $request
	 * @param AuthenticationException $exception
	 * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Response
	 */
	public function unauthenticated($request, AuthenticationException $exception)
	{
		return failed('身份认证失败', 401);
 }
}

以上这篇Laravel 框架返回状态拦截代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP生成带有雪花背景的验证码
Oct 09 PHP
判“新”函数:得到今天与明天的秒数
Oct 09 PHP
屏蔽浏览器缓存另类方法
Oct 09 PHP
一个PHP日历程序
Dec 06 PHP
MySql 按时间段查询数据方法(实例说明)
Nov 02 PHP
Zend的AutoLoad机制介绍
Sep 27 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
Apr 28 PHP
Yii不依赖Model的表单生成器用法实例
Dec 04 PHP
PHP中获取文件创建日期、修改日期、访问时间的方法
Nov 05 PHP
简单解决微信文章图片防盗链问题
Dec 17 PHP
PHP Redis扩展无法加载的问题解决方法
Aug 22 PHP
PHP7 弃用功能
Mar 09 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
Oct 17 #PHP
Mac下关于PHP环境和扩展的安装详解
Oct 17 #PHP
mac pecl 安装php7.1扩展教程
Oct 17 #PHP
浅谈laravel框架sql中groupBy之后排序的问题
Oct 17 #PHP
Laravel框架中集成MongoDB和使用详解
Oct 17 #PHP
解决laravel中日志权限莫名变成了root的问题
Oct 17 #PHP
关于laravel 日志写入失败问题汇总
Oct 17 #PHP
You might like
PHP 面向对象 PHP5 中的常量
2010/05/05 PHP
解析如何用php screw加密php源代码
2013/06/20 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
js检查页面上有无重复id的实现代码
2013/07/17 Javascript
页面图片浮动左右滑动效果的简单实现案例
2014/02/10 Javascript
Nodejs异步回调的优雅处理方法
2014/09/25 NodeJs
javascript根据时间生成m位随机数最大13位
2014/10/30 Javascript
如何用JavaScript实现动态修改CSS样式表
2016/05/20 Javascript
详解jQuery lazyload 懒加载
2016/12/19 Javascript
值得收藏的vuejs安装教程
2017/11/21 Javascript
在vue里面设置全局变量或数据的方法
2018/03/09 Javascript
vuex2中使用mapGetters/mapActions报错的解决方法
2018/10/20 Javascript
微信小程序授权登陆及每次检查是否授权实例代码
2019/09/18 Javascript
微信小程序实现一个简单swiper代码实例
2019/12/30 Javascript
three.js显示中文字体与tween应用详析
2021/01/04 Javascript
JS hasOwnProperty()方法检测一个属性是否是对象的自有属性的方法
2021/01/29 Javascript
Django发送html邮件的方法
2015/05/26 Python
Python爬取qq空间说说的实例代码
2018/08/17 Python
在Pycharm terminal中字体大小设置的方法
2019/01/16 Python
Python3使用Matplotlib 绘制精美的数学函数图形
2019/04/11 Python
Python静态类型检查新工具之pyright 使用指南
2019/04/26 Python
搞清楚 Python traceback的具体使用方法
2019/05/13 Python
Python3安装pip工具的详细步骤
2019/10/14 Python
python保存log日志,实现用log日志画图
2019/12/24 Python
python实现猜单词游戏
2020/05/22 Python
简单聊聊H5的pushState与replaceState的用法
2018/04/03 HTML / CSS
中专生毕业自我鉴定
2013/11/01 职场文书
办公室驾驶员岗位职责
2013/11/15 职场文书
大学四年学习的自我评价分享
2013/12/09 职场文书
承诺书样本
2014/08/30 职场文书
不尊敬老师检讨书范文
2014/11/19 职场文书
2014年科室工作总结
2014/11/20 职场文书
2015小学五年级班主任工作总结
2015/05/21 职场文书
小学生家长意见
2015/06/03 职场文书
浅谈python数据类型及其操作
2021/05/25 Python
mysql 生成连续日期及变量赋值
2022/03/20 MySQL