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 :

Imbriquer les formulaires avec des champs à remplir


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Par défaut Imbriquer les formulaires avec des champs à remplir
    Bonjour


    Dans un formulaire je veux incorporer les champs d'un formulaire dans un autre. En fait, j'ai 2 entités Souscripteur.php et Enfant.php et 1 Souscripteur peut avoir 0, 1 ou plusieurs enfants. J'ai déjà fait les liens entre les entités.
    Mon problème est de pouvoir les champs enfants dans le formulaire SouscripteurType.php. J'ai un champs "Nombre d'enfants dans Souscripteur.php et j'aimerais qu'en fonction du nombre d'enfants on puisse ajouter les champs enfants pour les remplir.


    Voici mes codes, je cherche d'abord ce qu'il faut mettre au niveau du controller, je pense pouvoir me débrouiller ensuite au niveau des vues, merci pour votre aide :


    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
    <?php
     
     
    namespace App\Controller;
     
     
    use App\Entity\Souscripteur;
    use App\Entity\Enfant;
    use App\Form\SouscripteurType;
    use App\Repository\SouscripteurRepository;
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\HttpFoundation\Response;
    use Symfony\Component\Routing\Annotation\Route;
     
     
    /**
     * @Route("/souscripteur")
     */
    class SouscripteurController extends AbstractControllera
    {
     
        /**
         * @Route("/new", name="souscripteur_new", methods={"GET","POST"})
         */
        public function new(Request $request): Response
        {
            $souscripteur = new Souscripteur();
     
     
            $enfant = new Enfant();
            $souscripteur->addEnfant($enfant);
     
     
            $form = $this->createForm(SouscripteurType::class, $souscripteur);
            $form->handleRequest($request);
     
     
            if ($form->isSubmitted() && $form->isValid()) {
                $entityManager = $this->getDoctrine()->getManager();
                $entityManager->persist($souscripteur);
                $entityManager->flush();
     
     
                return $this->redirectToRoute('souscripteur_index');
            }
     
     
            return $this->render('souscripteur/new.html.twig', [
                'souscripteur' => $souscripteur,
                'form' => $form->createView(),
            ]);
        }
     
     
     
    }

    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
     
    <?php
     
     
    namespace App\Form;
     
     
    use App\Entity\Souscripteur;
    use App\Entity\Enfant;
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\OptionsResolver\OptionsResolver;
    use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
    use Symfony\Component\Form\Extension\Core\Type\TextType;
    use Doctrine\ORM\EntityRepository;
    use Symfony\Component\Form\Extension\Core\Type\CollectionType;
     
     
    class SouscripteurType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('civilite', ChoiceType::class, [
                    'choices'  => [
                        'Madame' => 'madame',
                        'Mademoiselle' => 'mademoiselle',
                        'Monsieur' => 'monsieur',
                    ],
                ])
                ->add('nom', TextType::class)
                ->add('prenom')
                ->add('nom_jeune_fille')
                ->add('date_naissance')
                ->add('pays_naissance')
                ->add('ville_naissance')
                ->add('pays_residence')
                ->add('ville_residence')
                ->add('profession')
                ->add('adresse')
                ->add('code_postal')
                ->add('ville')
                ->add('telephone')
                ->add('tel_domicile')
                ->add('situation_familiale', ChoiceType::class, [
                    'choices'  => [
                        'Marié' => 'marie',
                        'Pacsé(e)' => 'pasce',
                        'Concubin(e)' => 'concubin',
                        'Célibataire' => 'celibataire',
                        'Divorcé(e)' => 'divorce',
                        'Veuf(ve)' => 'veuf',
                    ],
                ])
                ->add('nombre_enfants', ChoiceType::class, [
                    'choices'  => [
                        '0' => '0',
                        '1' => '1',
                        '2' => '2',
                        '3' => '3',
                        '4' => '4',
                        '5' => '5',
                        '6' => '6',
                        '8' => '8',
                        '9' => '9',
                        '10' => '10',
                    ],
                ])
                ->add('enfants', CollectionType::class, [
                    'entry_type' => Enfant::class,
                    ])
                ->add('conjoint')
            ;
        }
     
     
        public function configureOptions(OptionsResolver $resolver)
        {
            $resolver->setDefaults([
                'data_class' => Souscripteur::class,
            ]);
        }
    }



    Mais j'ai cette erreur:
    Could not load type "App\Entity\Enfant": class does not implement "Symfony\Component\Form\FormTypeInterface".

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Par défaut
    Bonjour,

    Ton sous-formulaire est de type entity au lieu d'être de de type form (EnfantType.php). Cf. documentation : https://symfony.com/doc/current/refe...ollection.html

  3. #3
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Par défaut
    Bonjour
    Merci j'ai mis ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ->add('enfants', CollectionType::class, [
         'entry_type' => EnfantType::class,
    ])
    mais j'ai cette erreur que je ne sais quoi faire:
    Entity of type "App\Entity\Souscripteur" passed to the choice field must be managed. Maybe you forget to persist it in the entity manager?

Discussions similaires

  1. Formulaire avec des champs supplémentaire
    Par Akramweb dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 14/04/2014, 13h00
  2. Formulaire avec des champs grisés qui se dégrisent quand on coche
    Par francky74 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 04/08/2011, 09h06
  3. soumettre un formulaire avec des champs vides
    Par pesti dans le forum GWT et Vaadin
    Réponses: 11
    Dernier message: 17/03/2009, 15h04
  4. Réponses: 13
    Dernier message: 22/10/2008, 09h19
  5. formulaire avec des champs multiples
    Par don'de dans le forum Struts 1
    Réponses: 13
    Dernier message: 16/02/2007, 09h42

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