Php Laravel API正在接收写在引号之间的字符串;空";而不是空字段
我正在使用Php Laravel API正在接收写在引号之间的字符串;空";而不是空字段,php,reactjs,laravel,laravel-5.6,form-data,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.a
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);
或
在将文件附加到
formData
对象之前,使用typeof
检查文件是否为object
我建议您遍历传递的值,因为它使代码更加紧凑,并允许添加n
个输入值
不要在表单数据中添加
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]);
}
您的验证已经将
文件
字段视为可选字段,因此后端应该可以处理它 因为您是说文件可能是空的,所以当文件为空时,您可以做的是返回文件而不是空的。类似于data.append(“file”,file?file[0]:file);这是你正在寻找的wt吗?我已经更新了我的答案,请检查它要求第二个参数是字符串或blob,这意味着如果它不是字符串,它很可能被强制为字符串。null
的字符串值是的“null”
而不是一个可为空的文件值,只要不将文件追加到formData中(如果没有)。在验证器中,将文件参数设置为可选,而不是可为null。否,它设置为null
。如果我这样做,它会抛出一个错误,说它无法读取null的属性'length'。
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]);
}
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]);
}