PHP开发接口如何处理前端传入的null值?这是我们经常碰到的问题,之前我们可能写个自定义函数就能解决问题,但是在Laravel框架里如何处理前端传入的空值呢?
最近受Laravel中间件以及官方文档启示,故总结了有两种方法供你选择:
- 使用Laravel集合的 map 方法。该方法适用于单个表单
- 使用中间件。该方法适用于有多个表单
单个表单
可以使用集合的map方法进行过滤,然后使用得到的 $params 进行操作。
- 在Helpers里的扩展函数里增加自定义函数:
if (! function_exists('null_filter')) { function null_filter($arr) { foreach ($arr as $key => &$val) { if (is_array($val)) { $val = null_filter($val); } else { if ($val === null) { unset($arr[$key]); } } } return $arr; } } - 在控制器里使用该函数
public function post(Request $request) { $params=null_filter($request->all()); // 现在表单的内容在 $params 中了,并且去掉了空值 }多个表单
首先推荐看一下官方文档。
其实也是使用了上面的代码进行过滤,不过这是在中间件中进行的,只要在需要进行过滤的路由中使用这个中间件即可做到,这样无需再每一个Controller中写一遍了。
-
先用
php artisan make:middleware RejectEmptyValues命令创建一个中间件。
此命令将会在app/Http/Middleware目录内设定一个名称为RejectEmptyValues的类。 -
在Helpers里的扩展函数里增加自定义函数:
if (! function_exists('null_filter')) { function null_filter($arr) { foreach ($arr as $key => &$val) { if (is_array($val)) { $val = null_filter($val); } else { if ($val === null) { unset($arr[$key]); } } } return $arr; } } -
修改 RejectEmptyValues 的代码
<?php namespace 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) { $request->replace(null_filter($request->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’);