Проверка Laravel пропускает пустой ввод

У меня есть форма laravel для обновления информации о существующем пользователе в базе данных, но если поле в этой форме пустое, я не хочу, чтобы она обновляла эту запись в базе данных. Как и сейчас, если поле пусто и форма отправлена, он передает этот пустой ввод и удаляет запись в базе данных.

Ниже приведена функция редактирования информации о пользователе и последующего обновления базы данных. В настоящее время я прикрепляю Request::old('...') к электронному письму, но поскольку проверка на него является «уникальной: пользователи», выдается ошибка «электронная почта занята».

Спасибо,

public function postEdit(Request $request)
{
    $this->validate($request, [
        'email' => 'unique:users|email|max:255',
        'password' => 'min:6',
        'confirm_password' => 'same:password', 
        'about_me' => 'max:500',
    ]);

    Auth::user()->update([


        'email' => $request->input('email'),
        'password' => bcrypt($request->input('password')),
        'confirm_password' => bcrypt($request->input('confirm_password')),
        'about_me' => $request->input('about_me'),
    ]);

    return redirect()->route('profile.edit')->with('info', 'You have updated your profile!');
}

person Matt Pierce    schedule 29.11.2015    source источник
comment
Если пользователь удаляет информацию, то это означает, что он хочет, чтобы поле было пустым. Нет?   -  person itachi    schedule 29.11.2015
comment
Ну, им нужен адрес электронной почты в системе. Таким образом, варианты будут следующими: (1) сделать поле обязательным, но иметь проверку, которая не приводит к ошибке, если это электронное письмо совпадает с текущей записью базы данных для этого пользователя, или (2) разрешить поле быть пустым и, если это так, просто сохраните текущую запись базы данных и не устанавливайте для нее значение ' '.   -  person Matt Pierce    schedule 29.11.2015
comment
Уникальный принимает третий параметр. Передайте идентификатор пользователя в этом параметре, и он проверит уникальность электронной почты, хотя поле для соответствующего пользователя будет пропущено.   -  person itachi    schedule 29.11.2015


Ответы (2)


Вам нужно изменить unique правило, чтобы исключить запись, которую вы редактируете.

Вместо

'email' => 'unique:users|email|max:255',

вы должны использовать:

'email' => 'unique:users,email,'. Auth::user()->id.'|email|max:255',

Справочник по уникальному правилу

person Marcin Nabiałek    schedule 29.11.2015
comment
Спасибо, я искал исключение в правилах проверки и не видел, чтобы оно было указано в списке уникальных. - person Matt Pierce; 29.11.2015

В правилах проверки вы можете установить «обязательно», и это должно помочь.

person Echo    schedule 29.11.2015
comment
Верно, но проблема в том, что если это поле является обязательным, и пользователь хочет сохранить это электронное письмо таким же, тогда он вернет ошибку, поскольку электронное письмо уже занято. - person Matt Pierce; 29.11.2015
comment
Я вижу 2 варианта в этом случае. 1) Удалить уникальное правило из валидатора и проверить вручную. 2) В этом случае пользователь должен быть авторизован. Напишите еще одно правило, которое будет сочетать уникальное правило, и проверьте, совпадает ли адрес электронной почты авторизованного пользователя с введенным. - person Echo; 29.11.2015