我有用户名,电子邮件,密码和头像(图像)字段的注册表。一切工作,除了图像字段,这可以是空的。我使用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)
})
})
}
如果我填写了每个字段,它的工作很好,也像检查扩展名或文件大小的工作,唯一的问题是当我没有选择任何图像。我有nullable包括在验证,但我仍然得到错误消息,从验证,它必须是一个图像,它需要有哪个扩展名。
3条答案
按热度按时间jhdbpxl91#
这是因为
data.avatar
作为空字符串发送到后端,您可以为data.avatar
编写一个watch
,每次data.avatar
为空字符串时,将其更改为null。如以下代码:ugmeyewa2#
这就是我的做法,效果非常好,我只是在input上添加了一个ref属性,它应该是用户头像,然后通过Vue检索输入值,如下所示
this.$refs.photo.files[0]
:在我的HTML中使用Vue
在我的js中使用Vue
wa7juj8i3#
如果您的
data.avatar
未定义或为空,您的服务器将接收一个undefined
或null
字符串作为您的头像字段的值。因此,Laravel将在该字符串上测试图像规则。要修复它,您可以确保您的图像没有未定义,以便在请求中发送它。
或者