Partage
  • Partager sur Facebook
  • Partager sur Twitter

Symfony 7 form register entity multiple

Symfony 7 form register entity multiple

Sujet résolu
    25 mars 2024 à 20:27:52

    Bonjour à tous,

    En Symfony 7, sur mon formulaire d'inscription (register), j'ai ajouté une fonctionnalité permettant à l'utilisateur qui s'inscrit d'indiquer le nombre de salles qu'il possède.Je crée un projet pour des salles de cinémas

    Cependant, je ne vois pas comment mettre en place un système me permettant d'ajouter des champs (Nom de la Salle + la capacité) pour ajouter les salles une par une. J'ai seulement réussi à intégrer une salle jusqu'à présent en instanciant.

    Je pense qu'il faut faire une boucle avec un ajout de bouton, mais je n'y arrive pas. J'ai tellement essayé de faire des choses... je suis perdu.

    Je voudrais que sur le form register j'ai 1 champs qui me permet d'ajouter 1 salles une à une.

    Voici mon mon controlleur du form register :

    #[Route('/register', name: 'app_register')]
        public function register(Request $request, UserPasswordHasherInterface $userPasswordHasher, Security $security, EntityManagerInterface $entityManager): Response
        {
            $user = new User();
            $user->setRoles(['ROLE_CINEMA']); // Les utilisateurs reçoivent automatiquement le rôle ROLE_CINEMA lors de l'inscription
    
            $salle1 = new Salle();
            $salle1->setNom('Nom de la salle 1');
            $salle1->setNombrePlaces(100);
    
            $user->addSalle($salle1);
    
            $form = $this->createForm(RegistrationFormType::class, $user);
            $form->handleRequest($request);
    
            if ($form->isSubmitted() && $form->isValid()) {
                // Encodez le mot de passe
                $user->setPassword(
                    $userPasswordHasher->hashPassword(
                        $user,
                        $form->get('plainPassword')->getData()
                    )
                );
    
                $entityManager->persist($user);
                $entityManager->flush();
    
                return $security->login($user, 'form_login', 'main');
            }
    
            return $this->render('registration/register.html.twig', [
                'registrationForm' => $form->createView(),
            ]);
        }


    Ma vue :

    {% extends 'base.html.twig' %}
    
    {% block title %}Register{% endblock %}
    
    {% block body %}
        <h1>Register</h1>
    
        {{ form_errors(registrationForm) }}
    
        {{ form_start(registrationForm) }}
            {{ form_row(registrationForm.email) }}
            {{ form_row(registrationForm.plainPassword, {
                label: 'Password'
            }) }}
            {{ form_row(registrationForm.agreeTerms) }}
    
            <button type="submit" class="btn">Register</button>
        {{ form_end(registrationForm) }}
    {% endblock %}


    La vue de mon navigateur :

    -
    Edité par Spawnkiller66 25 mars 2024 à 20:28:55

    • Partager sur Facebook
    • Partager sur Twitter
      25 mars 2024 à 23:15:54

      Salut

      A ce moment-là, il te faudra un CollectionType comme avant notre dernier sujet commun, mais aussi du JavaScript pour gérer la collection côté client.

      • Partager sur Facebook
      • Partager sur Twitter
        26 mars 2024 à 10:04:33

        La collectionType est déjà présente dans mon formulaire formRegister. J'ai mis en place un système de formulaires imbriqués, mais je ne vois pas comment le réaliser en JavaScript. Sais-tu où je pourrais trouver un exemple ?


        Mon form Register :

        public function buildForm(FormBuilderInterface $builder, array $options): void
            {
                $builder
                    ->add('email')
                    ->add('plainPassword', PasswordType::class, [
                        // instead of being set onto the object directly,
                        // this is read and encoded in the controller
                        'mapped' => false,
                        'attr' => ['autocomplete' => 'new-password'],
                        'constraints' => [
                            new NotBlank([
                                'message' => 'Please enter a password',
                            ]),
                            new Length([
                                'min' => 6,
                                'minMessage' => 'Your password should be at least {{ limit }} characters',
                                // max length allowed by Symfony for security reasons
                                'max' => 4096,
                            ]),
                        ],
                    ])
                    ->add('salles', CollectionType::class, [
                        'entry_type' => SalleType::class,
                        'allow_add' => true, // Permet d'ajouter dynamiquement des champs de saisie pour les salles
                        'allow_delete' => true, // Permet de supprimer dynamiquement des champs de saisie pour les salles
                        'by_reference' => false, // Assure que les salles ajoutées sont correctement associées à l'utilisateur
                        'label' => 'Salles', // Label pour le groupe de champs de saisie pour les salles
                    ])
                    ->add('agreeTerms', CheckboxType::class, [
                        'mapped' => false,
                        'constraints' => [
                            new IsTrue([
                                'message' => 'You should agree to our terms.',
                            ]),
                        ],
                    ]);
            }



        • Partager sur Facebook
        • Partager sur Twitter
          26 mars 2024 à 11:12:10

          A tout hasard, dans la documentation officielle de Symfony ? Ils montrent avec Stimulus dans la version 7, je pense que si tu regardes pour une version moins récente, tu devrais avoir des exemples sans. (Edit : la manière de faire n'ayant, au niveau purement HTML / JavaScript, pas changé depuis la version 2.5 de Symfony en ce qui concerne les collections, regarder pour la version 4 ou 5 ne devrait pas changer le résultat).

          Et autrement, il y a toujours des tutoriels plus ou moins à jour qui doivent en parler. Parfois sous la dénomination champs/formulaires embarqués.

          -
          Edité par Ymox 26 mars 2024 à 11:17:22

          • Partager sur Facebook
          • Partager sur Twitter

          Symfony 7 form register entity multiple

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          • Editeur
          • Markdown