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 相关文章推荐
PHP4在WinXP下IIS和Apache2服务器上的安装实例
Oct 09 PHP
PHP+APACHE实现用户论证的方法
Oct 09 PHP
php 读取文件乱码问题
Feb 20 PHP
PHP程序员面试 切忌急功近利(更需要注重以后的发展)
Sep 01 PHP
第二章 PHP入门基础之php代码写法
Dec 30 PHP
php递归创建和删除文件夹的代码小结
Apr 13 PHP
php连接与操作PostgreSQL数据库的方法
Dec 25 PHP
php创建多级目录的方法
Mar 24 PHP
PHP中把对象数组转换成普通数组的方法
Jul 10 PHP
php函数连续调用实例分析
Jul 30 PHP
微信公众平台开发教程②微信端分享功能图文详解
Apr 10 PHP
使用laravel和ECharts实现折线图效果的例子
Oct 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中冒号、endif、endwhile、endfor使用介绍
2010/04/28 PHP
PHP获取用户客户端真实IP的解决方案
2016/10/10 PHP
Javascript操纵Cookie实现购物车程序
2006/11/23 Javascript
用javascript获取textarea中的光标位置
2008/05/06 Javascript
nodejs教程 安装express及配置app.js文件的详细步骤
2013/05/11 NodeJs
jquery得到font-size属性值实现代码
2013/09/30 Javascript
js 判断图片是否加载完以及实现图片的预下载
2014/08/14 Javascript
jQuery数据缓存用法分析
2015/02/20 Javascript
判断访客终端类型集锦
2015/06/05 Javascript
jquery 判断div show的状态实例
2016/12/03 Javascript
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
详解Vue.js在页面加载时执行某个方法
2018/11/20 Javascript
vue 导航锚点_点击平滑滚动,导航栏对应变化详解
2020/08/10 Javascript
vue实现选中效果
2020/10/07 Javascript
vue基于Echarts的拖拽数据可视化功能实现
2020/12/04 Vue.js
[47:38]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python实现备份文件实例
2014/09/16 Python
在Apache服务器上同时运行多个Django程序的方法
2015/07/22 Python
Python数据库的连接实现方法与注意事项
2016/02/27 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
2017/12/15 Python
python处理csv中的空值方法
2018/06/22 Python
Python os.access()用法实例
2019/02/18 Python
Keras 数据增强ImageDataGenerator多输入多输出实例
2020/07/03 Python
英国简约舒适女装品牌:Great Plains
2018/07/27 全球购物
美国专业汽车音响和移动电子产品零售商:Car Toys
2019/05/13 全球购物
J2EE系统只能是基于web
2015/09/08 面试题
应聘教师推荐信
2013/10/31 职场文书
会计岗位职责范本
2014/03/07 职场文书
运动会班级口号
2014/06/09 职场文书
幼儿园标语大全
2014/06/19 职场文书
党员评议个人总结
2014/10/20 职场文书
春秋淹城导游词
2015/02/11 职场文书
雷锋之歌观后感
2015/06/10 职场文书
pytorch 使用半精度模型部署的操作
2021/05/24 Python
pandas中DataFrame检测重复值的实现
2021/05/26 Python
浅谈Redis跟MySQL的双写问题解决方案
2022/02/24 Redis