Laravel 5

Validation conditionnelle

Avatar de Artemis-Lhow
Artemis-Lhow

Bonsoir !

J'aimerai uiliser les request pour valider l'insertion de champs dans plusieurs tables, sauf que certains champs ne doivent être remplis que si d'autres le sont également...

Hors sauf erreur de ma part les requests ne permettent pas ça... une idée ?

Bonne soirée et merci,

Artemis

Posté il y a 8 mois
Avatar de bestmomo
bestmomo

Bonjour,

Il existe toute la série des required conditionnels.

Posté il y a 8 mois
Avatar de Artemis-Lhow
Artemis-Lhow

Bonjour momo !

Merci pour ta réponse, j'ai essayé le code ci-dessous... mais sans effet . Faut-il que toute la validation se fasse dans le controller ou y'a t-il un moyen pour faire toute la validation dans le AdherentsRequest ?

Bonne journée !

public function store(AdherentsRequest $request)
    {
        $validation = Validator::make($request->all(), [
            'civilite_conjoint' => Rule::requiredIf(!empty($request->nom_conjoint) || !empty($request->prenom_conjoint) || !empty($request->naissance_conjoint)),
            'nom_conjoint' => Rule::requiredIf(!empty($request->civilite_conjoint) || !empty($request->prenom_conjoint) || !empty($request->naissance_conjoint)),
            'prenom_conjoint' => Rule::requiredIf(!empty($request->civilite_conjoint) || !empty($request->nom_conjoint) || !empty($request->naissance_conjoint)),
            'naissance_conjoint' => Rule::requiredIf(!empty($request->civilite_conjoint) || !empty($request->nom_conjoint) || !empty($request->prenom_conjoint)),
        ]);
    }
Posté il y a 8 mois
Avatar de bestmomo
bestmomo

Salut,

La validation il vaut mieux la regourper soit dans le contrôleur, soit dans le form request dans lequel on peut tout faire sans problème, il est fait pour ça.

Posté il y a 8 mois
Avatar de Artemis-Lhow
Artemis-Lhow

J'ai tout mis dans le request (plus propre je trouve) seulement j'ai un soucis... quand j'envoie mon formulaire, j'ai beau laisser les champs vide, il me dit que les champs doivent être remplis o.O

    // Conjoint Adhérent
    'civilite_conjoint' => 'required_with:nom_conjoint,prenom_conjoint,naissance_conjoint|bail|filled|alpha',
    'nom_conjoint' => 'required_with:civilite_conjoint,prenom_conjoint,naissance_conjoint|bail|filled|string',
    'prenom_conjoint' => 'required_with:civilite_conjoint,nom_conjoint,naissance_conjoint|bail|filled|string',
    'naissance_conjoint' => 'required_with:civilite_conjoint,nom_conjoint,prenom_conjoint|bail|filled|date',
    'telephone_conjoint' => 'bail|filled|numeric|nullable',
    'email_conjoint' => 'bail|filled|email|nullable',

Une idée du problème ? Si j'ai bien compris les champs ne devraient être requis que si l'un d'eux est remplis... or là...

Posté il y a 8 mois
Avatar de bestmomo
bestmomo

Bonjour,

Ca serait la la règle filled qui perturbe ?

Posté il y a 8 mois
Avatar de Artemis-Lhow
Artemis-Lhow

Bonjour,

Alors... j'ai retiré le filled des champs concernés, sauf que maintenant c'est sur le format des données qu'il bloque ! Sauf erreur de ma part, si je retire alpha, string, etc... ça devrait passer, sauf qu'aucune vérification n'aura lieu sur les données... une idée ?

Posté il y a 8 mois
Avatar de bestmomo
bestmomo

Peut-être en ajoutant un bail il s'arrêtera au required.

Posté il y a 8 mois
Avatar de Artemis-Lhow
Artemis-Lhow

J'ai essayé... ça n'a rien donné. La seule solution c'est de ne pas faire de vérification de contenu, mais je n'aime pas du tout cette idée...

Posté il y a 8 mois
Avatar de HarrisKoffi
HarrisKoffi

Salut,

Moi je penses que tu dois aussi vérifier ta base de donnée.

Posté il y a 8 mois
Avatar de Artemis-Lhow
Artemis-Lhow

Salut !

La base de données n'a rien à voir la dedans, la vérification se fait avant insertion dans la base de données ;)

Mais j'ai trouvé la solution !

En fait si l'on met un required_if, laravel vérifie la présence d'un champ dans le formulaire et, même s'il est vide, le champ étant présent de base, il va vérifier que celui-ci correspond aux autres règles (alpha, numeric, etc...).

Donc, il suffit d'ajouter la règle nullable pour que :

  • Si le champ est présent mais vide tout va bien
  • Si le champ est présent mais contient une valeur, alors on applique le required_if

Voici le code fonctionnel :

            // Conjoint Adhérent
            'civilite_conjoint' => 'bail|required_with:nom_conjoint,prenom_conjoint,naissance_conjoint|nullable|alpha',
            'nom_conjoint' => 'bail|required_with:civilite_conjoint,prenom_conjoint,naissance_conjoint|nullable|alpha',
            'prenom_conjoint' => 'bail|required_with:civilite_conjoint,nom_conjoint,naissance_conjoint|nullable|alpha',
            'naissance_conjoint' => 'bail|required_with:civilite_conjoint,nom_conjoint,prenom_conjoint|nullable|date',
            'telephone_conjoint' => 'bail|numeric|digits:10|nullable',
            'email_conjoint' => 'bail|email|nullable',
Posté il y a 8 mois

Vous ne pouvez pas répondre à ce sujet.