Laravel API正在接收引号之间写为“ null”而不是null字段的字符串

时间:2018-08-18 07:00:56

标签: php reactjs laravel laravel-5.6 form-data

我正在使用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',
) 

3 个答案:

答案 0 :(得分:1)

您的文件看起来像一个数组,所以您可以做的是检查是否为数组,如果是,则分配文件[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);

OR

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);

答案 1 :(得分:1)

与其向表单数据中添加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字段视为可选字段,因此后端应该可以正常处理它。

答案 2 :(得分:0)

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

  

我建议您遍历传递的值,因为它使代码更紧凑,并允许添加n个输入值。

 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]);
  }