我有包含用户名,电子邮件,密码和头像(图像)字段的注册表。一切正常,但图像字段可以为null。我使用Vue作为前端,并使用axios将数据发送到Laravel。
这是验证:
public function register(Request $request)
{
$request->validate([
'username' => 'required|string|max:255|unique:users',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6',
'avatar' => 'nullable|image|mimes:jpg,jpeg,png|max:1999'
]);
$fileNameToStore = 'noimage.jpg';
return User::create([
'username' => $request->username,
'email' => $request->email,
'password' => Hash::make($request->password),
'avatar' => $fileNameToStore
]);
}
这就是我发送数据的方式:
register(context, data) {
let formData = new FormData();
formData.append('avatar', data.avatar)
formData.append('username', data.username)
formData.append('email', data.email)
formData.append('password', data.password)
return new Promise((resolve, reject) => {
axios.post('/register', formData,{
headers: {
'Content-Type': 'multipart/form-data'
}
})
.then(response => {
resolve(response)
})
.catch(error => {
reject(error)
})
})
}
如果我填写每个文件,它都可以正常工作,并且其他功能(如检查扩展名或文件大小)也可以正常工作,唯一的问题是我没有选择任何图像。验证中包含空值,但仍然从验证中收到错误消息,提示它必须是图像以及需要具有的扩展名。
答案 0 :(得分:0)
如果您的data.avatar
未定义或为空,则服务器将收到一个undefined
或null
字符串作为化身字段的值。因此,Laravel将在字符串上测试图像规则。
要对其进行修复,可以确保未定义图像以在请求中发送它。
if (data.avatar) {
formData.append('avatar', data.avatar);
}
或
formData.append('avatar', data.avatar ? data.avatar : '');
答案 1 :(得分:0)
这是因为data.avatar
作为空字符串发送到后端,并且
您可以为watch
写一个data.avatar
,每次data.avatar
为空字符串时,请将其更改为null。类似于以下代码:
watch(){
'data.avatar'(value){
if(value == '' || value == undefined){
this.data.avatar = null
}
}
}