步骤:
1、创建中间件,中间件的定义采用大驼峰命名
2、app/Http/Kernel.php中注册中间件
3、路由中使用中间件做http过滤拦截
4、重启swoole进程(作为web的http服务)
参考文档:
https://learnku.com/docs/laravel/7.x/middleware/7459
实现代码
1、创建ApiAfter中间件
php artisan make:middleware ApiAfter
定义ApiAfter中间件响应请求格式
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\JsonResponse;
class ApiAfter
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
//规定响应请求格式
//获取next请求之后的响应
$response = $next($request);
if (!($response instanceof JsonResponse)) {
return $response;
}
//获取响应数据
$data = $response->getData();
if (!is_array($data)) {
return $response;
}
if (!isset($data) || !is_int($data[0]) || !isset($data[1])) {
return $response->setData([
'ret' => 500,
'data' => [],
'msg' => '数据格式错误'
]);
}
if ($data[0] === 200) {
return $response->setData(
[
'ret' => 200,
'data' => $data[1],
'msg' => ''
]
);
}
return $response->setData([
'ret' => $data[0],
'data' => [],
'msg' => $data[1]
]);
}
}
2、app/Http/Kernel.php中注册中间件
protected $routeMiddleware = [
#此处省略其他中间件
'apiAfter' => \App\Http\Middleware\ApiAfter::class,
];
3、路由中使用中间件做http过滤拦截
测试testapi接口返回格式
Route::middleware('apiAfter')->any('testapi', function(){
return [200,'成功'];
});
4、重启swoole进程(作为web的http服务)
php artisan swoole:http stop
php artisan swoole:http start
测试结果: