我有这个示例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_id
和start
均未通过验证。
1条答案
按热度按时间2skhul331#
我在这里找到了https://developer.mozilla.org/en-US/docs/Web/API/FormData/set:
return(name,value);
参数
名称
字符串
值
型
换句话说,不能用FormData将
null
设置为一个值。我必须在前端捕获一个null值,用一个空字符串替换它,Laravels Middleware\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull
会将其转换回null
。