Laravel API 正在接收写在 "null" 的引号之间的字符串,而不是空字段

Laravel API is receiving string between quotes written "null" instead of a null field

我正在构建一个带有 FormData 的表单,用于将文件连同其他信息发送到 Laravel API,但文件可能是 null,根据规则:

$validator = Validator::make(Request::all(), [
    ...
    "file" => "nullable|mimes:pdf,doc,docx"
]);

并且从前端发送 FormData

const data = new FormData();

data.append("name", name);
data.append("instructions", instructions);
data.append("reward", reward);
data.append("deadline", deadline);
data.append("file", file ? file[0] : null);

file 的默认值为 null,但是当我检查 Request::all() 的日志时,我看到以下内容:

[2018-08-18 06:55:13] local.INFO: array (
  ..
  'file' => 'null',
) 

你的文件看起来像一个数组所以你可以做的是检查它是否是一个数组如果是然后分配文件[0]否则分配文件

const data = new FormData();
let fileData = file;
if(Array.isArray(file)){
    fileData = file[0]; 
}else{
    fileData = file
}
data.append("name", name);
data.append("instructions", instructions);
data.append("reward", reward);
data.append("deadline", deadline);
data.append("file", fileData);

data.append("name", name);
data.append("instructions", instructions);
data.append("reward", reward);
data.append("deadline", deadline);
data.append("file", Array.isArray(file) ? file[0] : file);

在将文件附加到 formData 对象之前,使用 typeof 检查文件是否为 object

I would suggest you to loop through the passing values because it makes the code more compact and allows to add n number of input values.

 let formData = new FormData();
  for(var key in userData){
   if(key == "file" && typeof userData['file'] == "object"){
     formData.append(key, userData[key][0]);
   }
    formData.append(key, userData[key]);
  }

不要向表单数据中添加 null,只需有条件地添加数据即可:

const data = new FormData();

data.append("name", name);
data.append("instructions", instructions);
data.append("reward", reward);
data.append("deadline", deadline);
if (Array.isArray(file) && file.length > 0) {
    data.append("file", file[0]);
}

您的验证已经将 file 字段视为可选字段,因此后端应该可以很好地处理它。