在Laravel框架里如何处理前端传入的空值

作者:包包大人   时间:2018-04-23 17:27:30   来源:原创   阅读:231   评论:0  

PHP开发接口如何处理前端传入的null值?这是我们经常碰到的问题,之前我们可能写个自定义函数就能解决问题,但是在Laravel框架里如何处理前端传入的空值呢?
最近受Laravel中间件以及官方文档启示,故总结了有两种方法供你选择:

  • 使用Laravel集合的 map 方法。该方法适用于单个表单
  • 使用中间件。该方法适用于有多个表单

    单个表单

    可以使用集合的map方法进行过滤,然后使用得到的 $params 进行操作。
  1. 在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;
         }
     }
    
  2. 在控制器里使用该函数
    public function post(Request $request)
    {
     $params=null_filter($request->all());
     // 现在表单的内容在 $params 中了,并且去掉了空值
    }
    

    多个表单

    首先推荐看一下官方文档
    其实也是使用了上面的代码进行过滤,不过这是在中间件中进行的,只要在需要进行过滤的路由中使用这个中间件即可做到,这样无需再每一个Controller中写一遍了。
  1. 先用

    php artisan make:middleware RejectEmptyValues
    

    命令创建一个中间件。
    此命令将会在 app/Http/Middleware 目录内设定一个名称为 RejectEmptyValues 的类。

  2. 在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;
         }
     }
    
  3. 修改 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);
    }
    }
    
  4. 注册中间件,在app/Http/Kernel.php文件的$routeMiddleware中加入一行
    'reject_empty_values' => \App\Http\Middleware\RejectEmptyValues::class,
    
  5. 使用中间件示例
    Route::post(‘/test’,’TestController@post’)->middleware(‘reject_empty_values’);
    
  • 点赞
  • 收藏
  • 分享

评论 (0人参与

最新评论
暂无评论
写博客