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] Rendu avec validation_constraints


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 47
    Points : 52
    Points
    52
    Par défaut [Form] Rendu avec validation_constraints
    Bonjour à tous j'ai un petit souci concernant le rendu des formulaires sous symfony.

    J'ai une relation Many-To-Many avec attributs que j'ai donc modifié en One-To-Many - Many-To-One avec 3 entité.

    Concrètement sa donne :
    Une Entité Cours avec une relation One-To-Many sur CursusCourses
    Une Entité CursusCourses avec 2 relation Many-To-One sur Cours et Cursus et un attribut supplémentaire
    Une Entité Cursus avec une relation One-To-Many sur CursusCourses

    Mon problème est le suivant :
    Le formulaire correspondant a l'entité CursusCourses doit avoir un rendu différent en fonction de si il est imbriquer dans le CoursForm ou dans le CursusForm. En effet en fonction le rendu de la relation Cours ou Cursus ne doit pas être affiché. (car se sera l'objet en cours lui-même la relation)

    Pour cela j'ai donc créer des groupe de validation sur mon entité CursusCourses, comme suis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Bundle\Entity\CursusCourses:
        properties:
            Cours:
                - Type: { type: Bundle\Entity\Cours, groups: [registration_cursus] }
                - NotNull: { groups: [registration_cursus] }
            Cursus:
                - Type: { type: Bundle\Entity\Cursus, groups: [registration_cours] }
                - NotNull: { groups: [registration_cours] }
            ConstraintAccess:
                - Type: { type: Bundle\Entity\ConstraintAccess }
    Mai j'ai l'impression que les groupe de validation ne concerne que la partie process du formulaire pas la partie de rendu.

    Avez-vous une idée de comment rendre un formulaire en fonction d'un groupe de validation donnée pour que mon CursusCoursesType puisse être rendu sans le champs 'Cours' dans une imbriquation du Form CoursType et sans le champs 'Cursus' dans une imbriquation du Form CursusType

    D'avance merci !

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Bonjour,

    les validation_groups n'agissent que sur la validation, pas sur les champs à ajouter au formulaires.

    tu peux en revanche passer des options à ton formulaire pour ajouter tel ou tel champs
    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
     
    //CursusCoursType.php
     
    public function buildForm(FormBuilderInterface builder,$data,$options){
    $builder->add('...'//les champs communs s'il y en a
     
    switch($options['type']){
     case 'Cours':
    $builder->add('cours',new CoursType());
    break;
    case 'Cursus':
    $builder->add('cursus',new CursusType());
    break;
    }
    }
     
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $validationResolver = function (Options $options) {
                    return $options['type'];
        }
        $resolver->setDefaults(array(
            'type' => 'Cours',
            'validation_groups'=>$validationResolver
        ));
    }
     
    }
     
     
    //controller.php
     
    public function indexAction(){
     
    $form=$this->createForm(new CursusCoursType,null,array('type'=>'Cours'));
     
    }

  3. #3
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 47
    Points : 52
    Points
    52
    Par défaut
    Bonjour et merci pour ta réponse.

    Le souci est que le formulaire en question est imbriqué dans un autre.

    Mon controller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public function newAction()
    {
            $entity = new Cours();
            $form   = $this->createForm(new CoursType(), $entity);
     
            return $this->render('LIGEtrotterBundle:Cours:new.html.twig', array(
                'entity' => $entity,
                'form'   => $form->createView(),
            ));
    }
    CoursType :
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
    $builder
    ->add('code')
    ->add('name')
    ->add('content')
    ->add('active')
    ->add('User')
    ->add('ConstraintAccess')
    ->add('CursusCourses', 'collection', array(
    'label' => 'Cursus associé',
    'type' => new CursusCoursesType(),
    'allow_add' => true,
    'allow_delete' => true,
    'prototype' => true,
    ))
    ;
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
    $resolver->setDefaults(array(
    'data_class' => 'LIG\Bundle\EtrotterBundle\Entity\Cours',
    'cascade_validation' => true
    ));
    }
    tu croi que je peux faire ce que tu me dit directement dans CursusCoursesType() depuis CoursType() ?

    D'avance merci

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Tu peux toujours passer des options à tes sous-formulaires, même si ce sont des collections:
    http://symfony.com/doc/2.1/reference...n.html#options

    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
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
    $builder
    ->add('code')
    //...
    ->add('CursusCourses', 'collection', array(
    'label' => 'Cursus associé',
    'type' => new CursusCoursesType(),
    'allow_add' => true,
    'allow_delete' => true,
    'prototype' => true,
    'options'=>array(
        'type'=>$options['type']
       )
    ));
    }
    
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
    $resolver->setDefaults(array(
    'data_class' => 'LIG\Bundle\EtrotterBundle\Entity\Cours',
    'cascade_validation' => true,
    'type'=>'Cours'
    ));
    }

Discussions similaires

  1. Form Web avec mise en forme et stockage BdD
    Par jflebegue dans le forum Général Conception Web
    Réponses: 6
    Dernier message: 14/10/2005, 09h32
  2. [Report 6i] Mise en forme champs avec du texte
    Par Invité dans le forum Reports
    Réponses: 5
    Dernier message: 13/10/2005, 15h00
  3. [vb.net][form] probleme avec l'héritage
    Par graphicsxp dans le forum Windows Forms
    Réponses: 2
    Dernier message: 06/10/2005, 16h01
  4. Utiliser mySmartUpload.Form("Toto") avec aspSmartU
    Par PrinceMaster77 dans le forum ASP
    Réponses: 8
    Dernier message: 15/02/2005, 13h53
  5. Réponses: 5
    Dernier message: 27/08/2003, 11h45

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