Laravel 5

Validation conditionnelle

  • Avatar de Artemis-Lhow
    Membre depuis :
    17/05/2019
    Messages :
    15

    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

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2506

    Bonjour,

    Il existe toute la série des required conditionnels.

  • Avatar de Artemis-Lhow
    Membre depuis :
    17/05/2019
    Messages :
    15

    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)),
    ]);
    }
  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2506

    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.

  • Avatar de Artemis-Lhow
    Membre depuis :
    17/05/2019
    Messages :
    15

    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à...

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2506

    Bonjour,

    Ca serait la la règle filled qui perturbe ?

  • Avatar de Artemis-Lhow
    Membre depuis :
    17/05/2019
    Messages :
    15

    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 ?

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2506

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

  • Avatar de Artemis-Lhow
    Membre depuis :
    17/05/2019
    Messages :
    15

    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...

  • Avatar de HarrisKoffi
    Membre depuis :
    23/05/2019
    Messages :
    9

    Salut,

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

  • Avatar de Artemis-Lhow
    Membre depuis :
    17/05/2019
    Messages :
    15

    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',

Vous ne pouvez pas répondre à ce sujet.