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 4.2 中使用带有自定义预过滤器的 AJAX 上传 CSV 文件