Как проверить поле ввода, если значение не равно null в Laravel
Я пытаюсь создавать и обновлять пользователей с помощью laravel 5.4
Это проверка, добавленная для create user. Это работает.
$this->validate($request, [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|min:6|confirmed',
]);
При обновлении поле пароля не требуется. Но проверить, мин:6 и подтвердили правило, если поле Пароль не является нулем. Пробовал с sometimes
.. но не работает..
$this->validate($request, [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users,email,'.$id,
'password' => 'sometimes|min:6|confirmed',
]);
4 ответа:
Попробуйте использовать nullable как правило
'password' => 'nullable|min:6|confirmed',
См. https://laravel.com/docs/5.4/validation#a-note-on-optional-fields
Создание правил на основе поля пароля. Проверять только при наличии поля пароля.
if ($request->input('password')) { $rules = [ 'name' => 'required|max:255', 'email' => 'required|email|max:255|unique:users,email,'.$id, 'password' => 'required|min:6|confirmed', ]; } else { $rules = [ 'name' => 'required|max:255', 'email' => 'required|email|max:255|unique:users,email,'.$id ]; } $this->validate($request, $rules);
Вот как бы я это сделал:
//For new or create : $this->validate($request, [ 'name' => 'required|max:255', 'email' => 'required|email|max:255|unique:users', 'password' => 'required|min:6|confirmed', ]); //For edit or update: $this->validate($request, [ 'name' => 'required|max:255', 'email' => 'required|email|max:255|unique:users', 'password' => 'min:6|confirmed',//just remove required from password rule ]);
Пояснение:
Таким образом, значение будет проверено только тогда, когда оно будет определено (присутствует) в запросе
Если вы используете nullable, то валидатор примет ноль в качестве значения (которое я предполагаю неприемлемым)
Если вы удалитеpassword validation из update, то этот вход не будет проверен вообще, и любое значение будет принято (что опять же неприемлемо);
В случае, если столбец является нулевым
'password' => 'nullable|min:6|confirmed',
Ответ @ Rejinderi правильный!
В случае, если столбец не является нулевым (это может помочь другим)
'password' => 'sometimes|required|min:6|confirmed',
Результат
username = 'admin', password = null // fail- required username = 'admin', password = 123 // fail- min:6 username = 'admin' // pass- validate only exist