Проверка запроса Laravel - обнуляемое изображение - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть форма регистрации с полями имени пользователя, электронной почты, пароля и аватара (изображения). Все работает, за исключением изображения, которое может быть нулевым. Я использую 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, включенный в проверку, но я все еще получаю сообщение об ошибке проверки, что это должен быть образ и какое расширение оно должно иметь.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

это из-за data.avatar отправки в бэкэнд в виде пустой строки и Вы можете написать watch для data.avatar, которая каждый раз, когда data.avatar является пустой строкой, заменяет ее на ноль. как следующий код:

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

}
0 голосов
/ 06 ноября 2018

Если ваш data.avatar не определен или равен нулю, ваш сервер получит строку undefined или null в качестве значения для вашего поля аватара. Поэтому Laravel будет тестировать правило изображения для строки.

Чтобы исправить это, вы можете убедиться, что ваше изображение не является неопределенным, чтобы отправить его в вашем запросе.

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

Или

formData.append('avatar', data.avatar ? data.avatar : '');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...