Как проверить поле ввода, если значение не равно 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 4

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