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实现插入排序?
Apr 10 PHP
基于session_unset与session_destroy的区别详解
Jun 03 PHP
PHP小教程之实现链表
Jun 09 PHP
Codeigniter实现多文件上传并创建多个缩略图
Jun 12 PHP
PHP中substr()与explode()函数用法分析
Nov 24 PHP
php打印输出棋盘的实现方法
Dec 23 PHP
服务器上配置PHP运行环境教程
Feb 12 PHP
php精确的统计在线人数的方法
Oct 21 PHP
php从数据库中获取数据用ajax传送到前台的方法
Aug 20 PHP
PHP中将一个字符串部分字符用星号*替代隐藏的实现代码
Sep 08 PHP
Laravel Eloquent分表方法并使用模型关联的实现
Nov 25 PHP
php redis setnx分布式锁简单原理解析
Oct 23 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
PDO::query讲解
2019/01/29 PHP
Javascript 刷新全集常用代码
2009/11/22 Javascript
面向对象Javascript核心支持代码分享
2012/05/23 Javascript
{}与function(){}选用空对象{}来存放keyValue
2012/05/23 Javascript
基于mootools插件实现遮罩层新手引导
2012/05/24 Javascript
JS实现商品倒计时实现代码
2013/05/03 Javascript
js 遍历json返回的map内容示例代码
2013/10/29 Javascript
jQuery中操控hidden、disable等无值属性的方法
2014/01/06 Javascript
学习javascript面向对象 实例讲解面向对象选项卡
2016/01/04 Javascript
在JavaScript中模拟类(class)及类的继承关系
2016/05/20 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
2016/05/28 Javascript
ES6学习笔记之正则表达式和字符串正则方法分析
2017/04/25 Javascript
NodeJS实现图片上传代码(Express)
2017/06/30 NodeJs
vue生成随机验证码的示例代码
2017/09/29 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
2019/05/27 Javascript
vue拖拽组件 vuedraggable API options实现盒子之间相互拖拽排序
2019/07/08 Javascript
vue props default Array或是Object的正确写法说明
2020/07/30 Javascript
Python多进程同步简单实现代码
2016/04/27 Python
Python制作词云的方法
2018/01/03 Python
PyQt5每天必学之布局管理
2018/04/19 Python
详解Python中的内建函数,可迭代对象,迭代器
2019/04/29 Python
如何安装2019Pycharm最新版本(详细教程)
2019/09/26 Python
Python过滤掉numpy.array中非nan数据实例
2020/06/08 Python
python爬取网易云音乐热歌榜实例代码
2020/08/07 Python
利用Storage Event实现页面间通信的示例代码
2018/07/26 HTML / CSS
伦敦一家非常流行的时尚精品店:Oxygen Boutique
2017/01/15 全球购物
英国儿童图书网站:Scholastic
2017/03/26 全球购物
美国领先的奢侈手表在线零售商:WatchMaxx
2017/12/17 全球购物
几道数据库的概念性面试题
2014/05/30 面试题
农民致富事迹材料
2014/01/23 职场文书
企业诚信承诺书
2014/05/23 职场文书
商务英语求职信范文
2015/03/19 职场文书
《西游记》读后感(3篇)
2019/09/20 职场文书
golang正则之命名分组方式
2021/04/25 Golang
python 离散点图画法的实现
2022/04/01 Python
JS实现刷新网页后之前浏览位置保持不变示例详解
2022/08/14 Javascript