IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

[Form] Appliquer une contrainte sur un champ texte, en fonction de la valeur d'un autre élément du formulaire [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut [Form] Appliquer une contrainte sur un champ texte, en fonction de la valeur d'un autre élément du formulaire
    Hello,

    Voilà quelque chose qui me parait simple à réaliser manuellement, mais qui se transforme en chemin de croix avec sf.

    Dans un formulaire, possédant un champ texte, et une case à cocher.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <form name="f_someform">
    Texte : <input type="text" /><br/>
    Case à cocher : <input type="checkbox" /><br/>
    <input type="submit" value="soumettre" />
    </form>
    J'ai une contrainte à appliquer sur le champ texte, par exemple 'required'.
    Mais celle ci ne doit être appliquer que si la case à cocher est cochée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if( case_a_coche.is_checked )
        validate( text_field )
    else
        // text_field is ignored
    Je ne trouves actuellement pas d'informations sur ce cas de figure, malgré mes séances googling et autres tentatives plus vaines les unes que les autres.

    Par ailleurs, la ml ne répond pas, la doc n'en dis mot, et si vous avez tenté de lire les classes de Form, vous en conviendrez c'est trop très compliqué.

    Bref, je suis dans l'impasse, d'autant plus que ce composant est franchement très imbriqué, de plus, il est très obscure.

    Alors si vous avez une idée, une piste, un exemple, ou tout simplement la solution, cela m'enleverez une belle épine du pied, et m'éviterait de devoir une fois encore me plier à ce qu'il est possible de faire, et non ce que je souhaite.

    merci,
    a+

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Par défaut
    Je pense que tu peux t'en sortir avec les validation groups : http://symfony.com/doc/current/book/...idation-groups
    L'idee c'est que tu peux valider de plusieurs facon une meme entite. Imaginons un groupe "case cochee" qui contient un validateur required sur ton texte, et un group "case non cochee" qui ne contient aucun validateur en fait.

    Apres, il faut que tu trouves comment appliquer tel groupe en fonction du formulaire soumis par ton visiteur. Ca ne doit pas etre tres compliquer, rajoute ton code avant ton $form->isValid() et ca devrait le faire je pense.

    Sinon globalement je suis d'accord avec toi, la doc est encore bien maigre, mais la doc sur les forms est quasi inexistante.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Par défaut
    Ou utiliser le callback ?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    hello,

    merci à vous deux pour vos réponses !

    Alors pour les groupes, ils m'avaient cligné de l'oeil à moi aussi pour ce problème.
    Cependant, ma validation (ou non) du champs texte, doit se faire lors de l'exécution des contraintes.
    Alors que les groupes, comme indiquées ici http://symfony.com/doc/current/book/...idation-groups, permettent de sélectionner les contraintes à la déclaration du formulaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $form = $this->createFormBuilder($users, array(
            'validation_groups' => array('registration')
        )
        // ...
    ;
    Hors, je pense que si je modifie les contraintes du formulaire juste avant la validation, le framework refusera de valider le formulaire, puisque la déclaration de celui ci ne sera plus égale à celui utiliser pour valider l'input.
    Sa restent intéressant, je vais creuser cette idée.

    Pour le callback, c'est une bonne idée aussi à creuser, cependant, je vais être obligé de ré implémenter toutes mes contraintes connexes dans le callback.

    Car si mon champs doit être
    required
    email
    +callback

    Pour l'instant, je ne vois pas comment dire au framework de ne pas tester required et email, si dans mon callback je détecte que ce n'est pas nécessaire.
    Dès lors, je vais devoir implémenter ces contraintes dans le callback,
    mais je perds donc l'intérêt du framework qui est fait pour centraliser mes contraintes et ne pas les répéter
    Par ailleurs, dans ce cas là, autant tout mettre dans le contrôleur, au moins ce sera simple à maintenir.
    De plus rien ne dis que mon callback sera exécuté en premier.

    Faut que je teste tout cela, tout cela n'est que suppositions et hypothèses.

    Je vous tiens au jus,
    a+

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Par défaut
    Je dirais le callback tout seul.
    Tu peux toujours faire appel a la validation si besoin s'en fait sentir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $validator->validate(...)
    (http://symfony.com/doc/current/book/validation.html)

    Je ne connais pas les possibilités de validation_groups; c'est peut etre la solution.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    Hello,

    encore merci pour votre aide.

    Bon finalement j'ai utiliser les groupes de validation.

    Je suis pas bien heureux de cette solution,
    - elle est bizarre
    - L'ergonomie est nul, j'ai une double validation, d'un coté les jolie required du formulaire, de l'autre des raw messages qui popent au milieu du formulaire.
    - Je me pose des question quand à la viabilité de cette solution dans le cas de maj.
    - J'ai dû mélangé mes contraintes de formulaire dans mes entités
    - Je reste surpris d'avoir pu afficher un formulaire avec le groupe1, et le valider avec un groupe2.

    'Fin bon bref, en tant qu'end user je suis pas là pour faire du beau code,
    suis un peu dégoûté quand même.

    a+, merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajout d'une contrainte sur un champ
    Par Djobird dans le forum Langage SQL
    Réponses: 2
    Dernier message: 21/07/2011, 10h14
  2. Optimisation d'une requete sur un champ texte
    Par TARMINE dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/06/2006, 13h41
  3. Select sur une partie d'un champs texte
    Par dl_jarod dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/11/2005, 15h25
  4. [Interbase] Mettre une contrainte sur un champ
    Par mika dans le forum InterBase
    Réponses: 2
    Dernier message: 26/01/2005, 14h04
  5. contrainte sur deux champs d'une table
    Par bdkiller dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 17/09/2004, 18h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo