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 :

Formulaire complex & validation


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Points : 11
    Points
    11
    Par défaut Formulaire complex & validation
    Bonjour à tous, j'aurais besoin d'aide concernant la création d'un formulaire un peu complex et sa validation.

    J'ai une entité A ayant pour propriété, une entité B et une collection d'entité C, codé en gros tel quel (je ne met que les propriété les getters et setters sont ok):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    class A {
     
    	/**
    	 * @var integer $id
    	 *
    	 * @ORM\Column(type="integer", nullable=false)
    	 * @ORM\Id
    	 * @ORM\GeneratedValue(strategy="IDENTITY")
    	 */
        private $id;
     
        /**
    	 * @var string $label
    	 *
    	 * @ORM\Column(type="string", length=100, nullable=false)
    	 * @Assert\NotBlank()
    	 * @Assert\MaxLength(100)
    	 */
        private $label;
     
        /**
         * @var B $B
         *
         * @ORM\ManyToOne(targetEntity="B", fetch="EAGER")
         * @ORM\JoinColumn(name="b_id", referencedColumnName="id", nullable=false)
         */
        private $B;
     
        /**
         * @var ArrayColelction $collectionC
         *
         * @ORM\OneToMany(targetEntity="C", mappedBy="A", cascade={"persist"}, orphanRemoval=true)
         */
        private $collectionC;
    }
     
    class B {
     
    	const TYPE1 = 1;
    	const TYPE2 = 2;
    	const TYPE3 = 3;
     
    	/**
    	 * @var integer $id
    	 *
    	 * @ORM\Column(type="integer", nullable=false)
    	 * @ORM\Id
    	 * @ORM\GeneratedValue(strategy="IDENTITY")
    	 */
        private $id;
     
        /**
    	 * @var string $label
    	 *
    	 * @ORM\Column(type="string", length=100, nullable=false)
    	 * @Assert\NotBlank()
    	 * @Assert\MaxLength(100)
    	 */
        private $label;
    }
     
    class C {
    	/**
    	 * @var integer $id
    	 *
    	 * @ORM\Column(name="id", type="integer", nullable=false)
    	 * @ORM\Id
    	 * @ORM\GeneratedValue(strategy="IDENTITY")
    	 */
        private $id;
     
        /**
    	 * @var string $field1
    	 *
    	 * @ORM\Column(type="integer", length=100, nullable=false)
    	 */
        private $field1;
     
        /**
    	 * @var string $field2
    	 *
    	 * @ORM\Column(type="integer", length=100, nullable=false)
    	 */
        private $field2;
     
        /**
    	 * @var string $field3
    	 *
    	 * @ORM\Column(type="integer", length=100, nullable=false)
    	 */
        private $field3;
    }
    Le but étant le suivant, créer un formulaire de l'entité A et selon la valeur de B, ne rendre obligatoire ET n'afficher que certains champs de C.

    Par exemple;
    - si B vaut const::TYPE1, n'afficher et ne valider que field1 de C
    - si B vaut const::TYPE2, n'afficher et ne valider que field1 et field 2 de C
    - si B vaut const::TYPE3, n'afficher et ne valider que field3 de C

    J'ai déjà créer les différents formulaires, mais je ne sais pas vraiment comment caché les champs via Twig mise à part en utilisant de la css avec style="display:none", est ce qu'il y aurait une meilleur solution ? Et comment faire pour ne valider que les champs nécessaires ?

    Pour la validation, j'ai bien trouver le lien concernant "Groups based on Submitted Data" mais cela ne semble pas marcher pour une collection d'entité dans un form.

    Si vous aviez quelques suggestions / pistes à me fournir, ce serait top.

    Merci par avance.

  2. #2
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Hello,

    Au risque d'avoir l'air d'en user et d'en abuser, je trouve que les Callback répondent à (quasiment) tous les problèmes spécifiques de validation.

    Mais quelque part ils sont aussi là pour ça : Symfony2 propose de créer de manière très simple ses propres validateurs personalisés. Dès lors qu'on sort des NotBlank, Length et autres validateurs natifs, c'est vers les callback qu'il faut se tourner.

    La méthode de callback faisant partie de ton objet A, aura accès à A, B et à C[] tu pourras alors faire toutes les vérifications que tu veux et mettre toutes les violations de validité dont tu as besoin sur les champs de ton choix.

Discussions similaires

  1. Formulaire prérempli puis validation
    Par Shivaneth dans le forum Struts 1
    Réponses: 15
    Dernier message: 18/07/2007, 14h11
  2. Réponses: 2
    Dernier message: 04/07/2007, 17h10
  3. Formulaires dynamique et validation
    Par sir_gcc dans le forum JSF
    Réponses: 6
    Dernier message: 02/05/2007, 17h36
  4. Formulaire avec 2 validations possibles
    Par FBSVGR dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 24/05/2006, 08h47
  5. Formulaire qui se valide tout seul :8O:
    Par Boumeur dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/04/2005, 12h21

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