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下通过伪造http头破解防盗链的代码
Jul 03 PHP
PHP数据集构建JSON格式及新数组的方法
Nov 07 PHP
基于PHP生成静态页的实现方法
May 10 PHP
奉献出一个封装的curl函数 便于调用(抓数据专用)
Jul 22 PHP
PHP生成不重复标识符的方法
Nov 21 PHP
php通过文件头判断格式的方法
May 28 PHP
PHP制作登录异常ip检测功能的实例代码
Nov 16 PHP
php preg_match的匹配不同国家语言实例
Dec 29 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
Aug 31 PHP
php微信公众号开发之现金红包
Apr 16 PHP
laravel框架中视图的基本使用方法分析
Nov 23 PHP
详解PHP中curl_multi并发的实现
Jun 08 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的POSIX 函数以及进程测试的深入分析
2013/06/03 PHP
高质量PHP代码的50个实用技巧必备(下)
2016/01/22 PHP
使用Zttp简化Guzzle 调用
2017/07/02 PHP
解析John Resig Simple JavaScript Inheritance代码
2012/12/03 Javascript
javascript实现跳转菜单的具体方法
2013/07/05 Javascript
jQuery Form 页面表单提交的小例子
2013/11/15 Javascript
js中settimeout方法加参数的使用实例
2014/02/27 Javascript
JS实现闪动的title消息提醒效果
2014/06/20 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
2015/01/13 Javascript
AngularJS中使用HTML5手机摄像头拍照
2016/02/22 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
修改ligerui 默认确认按钮的方法
2016/12/27 Javascript
JS实现改变HTML上文字颜色和内容的方法
2016/12/30 Javascript
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
基于js中的原型(全面讲解)
2017/09/19 Javascript
Vue中 v-if/v-show/插值表达式导致闪现的原因及解决办法
2018/10/12 Javascript
Vue.js组件使用props传递数据的方法
2019/10/19 Javascript
[02:03]永远的信仰DOTA2 中国军团历届国际邀请赛回顾
2016/06/26 DOTA
[51:15]完美世界DOTA2联赛PWL S2 PXG vs Magma 第一场 11.21
2020/11/24 DOTA
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
Python实现的最近最少使用算法
2015/07/10 Python
python3中的md5加密实例
2018/05/29 Python
Django contenttypes 框架详解(小结)
2018/08/13 Python
Python的UTC时间转换讲解
2019/02/26 Python
Python获取时间范围内日期列表和周列表的函数
2019/08/05 Python
python调用matplotlib模块绘制柱状图
2019/10/18 Python
Python 定义只读属性的实现方式
2020/03/05 Python
tensorflow安装成功import tensorflow 出现问题
2020/04/16 Python
Pycharm配置autopep8实现流程解析
2020/11/28 Python
机械电子工程毕业生自荐信
2013/11/23 职场文书
学校三八妇女节活动情况总结
2014/03/09 职场文书
读书活动总结
2014/04/28 职场文书
单位个人查摆问题及整改措施
2014/10/28 职场文书
2014年实习班主任工作总结
2014/11/08 职场文书
2015年度学校卫生工作总结
2015/05/12 职场文书
《日月潭》教学反思
2016/02/20 职场文书