最近要同步数据,投递方给的数据为空时,我这边入库有点问题

比如:删除日期,这条记录没有删除,所以投递方给的是空字符串,那我这边默认值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']);
    });
});

LinAt
13 声望0 粉丝