web-dev-qa-db-fra.com

Comment valider un champ de saisie si la valeur n'est pas nulle dans Laravel

J'essaie de créer et de mettre à jour des utilisateurs avec Laravel 5.4

Ceci est la validation ajoutée pour créer un utilisateur. Ça marche.

$this->validate($request, [
    'name' => 'required|max:255',
    'email' => 'required|email|max:255|unique:users',
    'password' => 'required|min:6|confirmed',
]);

Lors de la mise à jour, le champ mot de passe n'est pas obligatoire. Mais validez la règle min: 6 et confirmée si le champ mot de passe n’est pas nul. Essayé avec sometimes .. mais ne fonctionnant pas ..

$this->validate($request, [
    'name' => 'required|max:255',
    'email' => 'required|email|max:255|unique:users,email,'.$id,
    'password' => 'sometimes|min:6|confirmed',
]);
5
noufalcep

essayez d'utiliser nullable en règle

'password' => 'nullable|min:6|confirmed',

voir https://laravel.com/docs/5.4/validation#a-note-on-optional-fields

19
Rejinderi

Si la colonne est nullable

'password' => 'nullable|min:6|confirmed',

La réponse de @ Rejinderi est correcte!

Dans le cas où la colonne n'est pas nullable (cela peut aider d'autres)

'password' => 'sometimes|required|min:6|confirmed',

Résultat

username = 'admin',
password = null // fail- required

username = 'admin',
password = 123 // fail- min:6

username = 'admin' // pass- validate only exist
0
C.V

Créez des règles basées sur le champ de mot de passe. Valider uniquement si le champ mot de passe est présent.

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);
0
linktoahref

Voici comment je le ferais:

//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
]);

Explication:
Ainsi, la valeur ne sera validée que lorsqu'elle sera définie (présente) dans la requête
Si vous utilisez nullable , le validateur accepteranullcomme valeur (ce que je suppose n'est pas acceptable)
Si vous supprimez password validation de la mise à jour, cette entrée ne sera pas du tout validée et toute valeur sera acceptée (ce qui n'est pas acceptable non plus);

0
Jarik Voroniak