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',
]);
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
'password' => 'nullable|min:6|confirmed',
La réponse de @ Rejinderi est correcte!
'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
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);
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);