发布网友 发布时间:2022-04-22 04:09
共1个回答
热心网友 时间:2024-02-03 17:26
有两种方法供你选择:
使用Laravel集合的 map 方法。该方法适用于单个表单。
使用中间件。该方法适用于有多个表单
单个表单
可以使用集合的map方法进行过滤,然后使用得到的 $params 进行操作。
public function post(Request $request){ // 过滤空值,并且trim
$params = collect($request)->map(function ($item) { if (is_string($item)) {
$item = empty(trim($item)) ? null : trim($item);
} return $item;
}); // 现在表单的内容在 $params 中了,并且去掉了空值}
关于里面函数的具体意义请参考官方文档。
多个表单
首先推荐看一下官方文档。 其实也是使用了上面的代码进行过滤,不过这是在中间件中进行的,只要在需要进行过滤的路由中使用这个中间件即可做到,这样无需再每一个Controller中写一遍了。
先用 php artisan make:middleware RejectEmptyValues 命令创建一个中间件。 此命令将会在 app/Http/Middleware 目录内设定一个名称为 RejectEmptyValues 的类。
修改 RejectEmptyValues 的代码
<?phpnamespace App\Http\Middleware;use Closure;class RejectEmptyValues{ /**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{ // 过滤空值,并且trim
$params = collect($request)->map(function ($item) { if (is_string($item)) {
$item = empty(trim($item)) ? null : trim($item);
} return $item;
});
$request->replace($params->all()); return $next($request);
}
}
注册中间件,在 app/Http/Kernel.php 文件的 $routeMiddleware 中加入一行
'reject_empty_values' => \App\Http\Middleware\RejectEmptyValues::class,
使用中间件示例,
Route::post('/test','TestController@post')->middleware('reject_empty_values');