axios 为什么发送到Laravel时FormData null值转换为“null”?

eimct9ow  于 12个月前  发布在  iOS
关注(0)|答案(1)|浏览(92)

我有这个示例JavaScript:

let data = new FormData();
data.set('mode_id', '');
data.set('start', null);
axios({
    method: 'POST',
    url: '/test',
    data: data,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
})

字符串
这是Laravel中的控制器端点:

public function store(Request $request)
{
    \Debugbar::info($request->all());

    $request->validate([
        'start'        =>  'required',
        'mode_id'      =>  'required',
    ]);


令我惊讶的是,对参数mode_id的验证失败了,但对参数start却没有。
从图中,我发现start值是一个字符串"null"

[
  "mode_id" => null
  "start" => "null"
]


为什么以及在哪里FormData null被转换为“null”?
如果我做一个PHPUNIT测试

$response = $this->->post('/test', [
        'mode_id' => '',
        'start' => null,
 ]);


正如预期的那样,参数mode_idstart均未通过验证。

2skhul33

2skhul331#

我在这里找到了https://developer.mozilla.org/en-US/docs/Web/API/FormData/set
return(name,value);
参数
名称

The name of the field whose data is contained in value.

字符串

The field's value. This can be a USVString or Blob (including subclasses
such as File). 
If none of these are specified the value is converted to a string.


换句话说,不能用FormData将null设置为一个值。我必须在前端捕获一个null值,用一个空字符串替换它,Laravels Middleware \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull会将其转换回null

相关问题