Laravel请求验证-可为空的映像

Laravel请求验证-可为空的映像,laravel,validation,Laravel,Validation,我有用户名、电子邮件、密码和头像(图像)字段的登记表。除了可以为空的image field之外,其他一切都可以工作。我使用Vue作为前端,并使用axios将数据发送到Laravel 这是验证: public function register(Request $request) { $request->validate([ 'username' => 'required|string|max:255|unique:users', 'email'

我有用户名、电子邮件、密码和头像(图像)字段的登记表。除了可以为空的image field之外,其他一切都可以工作。我使用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,但我仍然从验证中得到错误消息,它必须是一个图像,并且它需要具有哪个扩展名。

如果您的
数据。头像
未定义或为null,您的服务器将接收一个
未定义
null
字符串作为您的头像字段的值。因此,Laravel将在字符串上测试图像规则

要修复它,您可以确保您的图像没有未定义,以便在您的请求中发送它

if (data.avatar) {
    formData.append('avatar', data.avatar);
}


这是因为
数据。头像作为空字符串发送到后端,然后
您可以为
数据编写
监视
。avatar
,每次
数据时,它都是空字符串。avatar
将其更改为null。如以下代码所示:

watch(){
   'data.avatar'(value){
        if(value == '' || value == undefined){
             this.data.avatar = null 
          }
     }

}

数据的价值是什么。化身
?内容配置:表单数据;name=“化身”null@Miko没问题。祝您有个美好的一天。
watch(){
   'data.avatar'(value){
        if(value == '' || value == undefined){
             this.data.avatar = null 
          }
     }

}