【问题标题】:How prevent Laravel from stripping empty arrays如何防止 Laravel 剥离空数组
【发布时间】:2018-01-30 21:27:07
【问题描述】:

正如标题所说,如何防止 Laravel 删除输入 json 中的空数组?示例:给定客户请求

$.ajax({
    url: "/test",
    data: {
        populatedArray: ["Fine, as long as it has >0 elements"],
        emptyArray: [], // This property will not be available!
        tasks: {
            fooTask: {
                empty: [],
                nullObject: null,
                regular: "It should also work for nested"
            }
        }   
    },
    contentType: "application/json",
});

和控制器

public function test(Request $request) {        
    Log::info(json_encode($request->populatedArray));
    Log::info(json_encode($request->emptyArray));
}

我收到以下日志消息:

[2018-01-30 12:30:01] local.INFO: ["Fine, as long as it has >0 elements"]  
[2018-01-30 12:30:01] local.INFO: null  

我希望第二行产生 [] 但它不在 $request 对象中??

【问题讨论】:

    标签: laravel


    【解决方案1】:

    在发送到服务器之前,将数据打包为字符串

    $.ajax({
        url: "/stimpack/test/",
        data: { 
            myValue: "all good",
            populatedArray: ["Fine, as long as it has >0 elements"],
            emptyArray: [], // This property will not be available!,
            tasks: JSON.stringify({
                fooTask: {
                    empty: [],
                    nullObject: null,
                    regular: "Hi all"
                }
            }) 
        },
        contentType: "application/json"
    });
    

    接下来,在你的控制器中将字符串解压成这样的对象

    $inputAsObject = json_decode($request->tasks);
    

    记录它也会显示空数组

    Log::info(json_encode($inputAsObject));
    

    另一个好处是您不必担心 Laravel 将所有内容都视为关联数组。这意味着您可以这样做:

    Log::info(json_encode($inputAsObject->fooTask->empty));
    

    【讨论】:

      【解决方案2】:

      将第二个参数作为默认值传递给get() 方法

       $arr = [];
      
       Log::info(json_encode($request->get('emptyArray',$arr)));
      

      【讨论】:

      • 谢谢,虽然我有点不清楚。它还需要适用于更新示例中的嵌套(未知)参数,例如“tasks.fooTask.empty”。有什么想法吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-20
      相关资源
      最近更新 更多