laravel 自定义过滤中间件

Posted mrshao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laravel 自定义过滤中间件相关的知识,希望对你有一定的参考价值。

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

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

以上是关于laravel 自定义过滤中间件的主要内容,如果未能解决你的问题,请参考以下文章

大白话 Laravel 中间件

如何在 laravel 4.2 中使用带有自定义预过滤器的 AJAX 上传 CSV 文件

Sublime Text3自定义代码片段

Laravel:从自定义中间件油门组返回 bool

将自定义中间件添加到 Laravel Passport 端点

Laravel Pipeline 组件的实现