最近要同步数据,投递方给的数据为空时,我这边入库有点问题
比如:删除日期,这条记录没有删除,所以投递方给的是空字符串,那我这边默认值null就会变成0000-00-00 00:00:00
第一反应是过滤掉就好了,让投递方为空时不投递显然不现实,我这边处理下好了
刚开始想的是在接口业务里面直接判断下,后来想想四五个接口都去判断也不合适,而且代码也不优雅
想了下可以放在中间件中去处理,路由组中加入中间件就OK
第一步,先创建中间件
php artisan make:middleware FilterEmptyValues
第二步,增加一个自定义过滤空值函数
function filterNullValue($arr)
{
foreach ($arr as $key => &$val) {
if (is_array($val)) {
$val = filterNullValue($val);
} else {
if ($val === '') {
unset($arr[$key]);
}
}
}
return $arr;
}
第三步,FilterEmptyValues中间件中调用过滤逻辑
public function handle(Request $request, Closure $next)
{
$request->replace(filterNullValue($request->all()));
return $next($request);
}
第四步,在app/Http/Kernel.php文件中注册中间件,一般是在$routeMiddleware中注册,这样可以自行选择是否调用
protected $routeMiddleware = [
'xxxx' => 'xxx',
'filterEmptyValues' => \App\Http\Middleware\filterEmptyValues::class, //剔除空值中间件
];
最后一步,路由组中使用中间件
Route::group(['prefix' => 'v1', 'middleware' => ['haloApi', 'filterEmptyValues']], function () {
/**
* 用户信息
*/
Route::group(['prefix' => 'member'], function () {
Route::post('/store', [haloApi\MemberController::class, 'store']);
});
});
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。