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 相关文章推荐
图片存储与浏览一例(Linux+Apache+PHP+MySQL)
Oct 09 PHP
PHP GD 图像处理组件的常用函数总结
Apr 28 PHP
初学PHP的朋友 经常问的一些问题。不断更新
Aug 11 PHP
修改PHP的memory_limit限制的方法分享
Feb 21 PHP
浅析memcache启动以及telnet命令详解
Jun 28 PHP
php中将一段数据存到一个txt文件中并显示其内容
Aug 15 PHP
php中mkdir函数用法实例分析
Nov 15 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
Mar 07 PHP
100行PHP代码实现socks5代理服务器
Apr 28 PHP
thinkPHP5框架实现基于ajax的分页功能示例
Jun 12 PHP
PHP中抽象类,接口功能、定义方法示例
Feb 26 PHP
Laravel中10个有用的用法小结
May 06 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过滤html标记属性类用法实例
2014/09/23 PHP
PHP实现动态执行代码的方法
2016/03/25 PHP
PHP中addslashes与mysql_escape_string的区别分析
2016/04/25 PHP
Laravel 中创建 Zip 压缩文件并提供下载的实现方法
2019/04/02 PHP
表单项的name命名为submit、reset引起的问题
2007/12/22 Javascript
jQuery 获取URL参数的插件
2010/03/04 Javascript
网站内容禁止复制和粘贴、另存为的js代码
2014/02/26 Javascript
node.js入门教程
2014/06/01 Javascript
javascript中in运算符用法分析
2015/04/28 Javascript
JavaScript 节流函数 Throttle 详解
2016/07/04 Javascript
JavaScript中transform实现数字翻页效果
2017/03/08 Javascript
微信小程序 同步请求授权的详解
2017/08/04 Javascript
Bootstrap popover 实现鼠标移入移除显示隐藏功能方法
2018/01/24 Javascript
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
vue中,在本地缓存中读写数据的方法
2018/09/21 Javascript
微信小程序实现页面浮动导航
2020/01/08 Javascript
[00:37]2016完美“圣”典风云人物:AMS宣传片
2016/12/06 DOTA
[57:53]Secret vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python实现分析apache和nginx日志文件并输出访客ip列表的方法
2015/04/04 Python
整理Python最基本的操作字典的方法
2015/04/24 Python
Python设计模式之MVC模式简单示例
2018/01/10 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
2018/11/10 Python
python itsdangerous模块的具体使用方法
2020/02/17 Python
英国最大的LED专业零售商:Led Hut
2018/03/16 全球购物
C#笔试题和英文面试题
2013/02/07 面试题
个人收入证明范本
2014/01/12 职场文书
家教广告词
2014/03/19 职场文书
岗位说明书标准范本
2014/07/30 职场文书
大学奖学金获奖感言
2014/08/15 职场文书
幼儿园工作总结2015
2015/04/01 职场文书
公司承诺书格式范文
2015/04/28 职场文书
新年晚会主持词开场白
2015/05/28 职场文书
工作收入证明范本
2015/06/12 职场文书
MySQL分库分表与分区的入门指南
2021/04/22 MySQL
MySQL 亿级数据导入导出及迁移笔记
2021/06/18 MySQL
Python 阶乘详解
2021/10/05 Python