Partage
  • Partager sur Facebook
  • Partager sur Twitter

Mauvais enregistrement en bdd

Mauvais enregistrement en bdd

Sujet résolu
    14 mars 2024 à 15:12:46

    Bonjour,

    Je développe un formulaire d'inscription pour que des salles de cinéma s'inscrivent avec leur adresse email, mot de passe et le nombre de salles qu'elles possèdent, en utilisant Symfony 7.

    Cependant, lorsque je m'inscris et que j'indique, par exemple, 5 salles, je ne retrouve pas les 5 salles enregistrées dans la base de données. Seulement le nombre "5" apparaît dans le champ du numéro de salle.

    Voila mon RegisterControlleur.php

    public function register(Request $request, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager): Response
        {
            $user = new User();
            ///////////////////////////////////////
            $salle = new Salle(); // instance de entity salle 
            $user->addSalle($salle);   // User permet de faire 
            ///////////////////////////////////////
            $form = $this->createForm(RegistrationFormType::class, $user);
            $form->handleRequest($request);
    
            if ($form->isSubmitted() && $form->isValid()) {
                // encode the plain password
                $user->setPassword(
                    $userPasswordHasher->hashPassword(
                        $user,
                        $form->get('plainPassword')->getData()
                    )
                );
                $user->setRoles(['ROLE_CINEMA']); // Rolecinema
    
    
                /********************************************** */
                $selectedSalleCount = $form->get('salle')->getData()->count();
    
                for ($i = 0; $i < $selectedSalleCount; $i++) {
                    $salle = new Salle();
                    $user->addSalle($salle);
                }
                /*********************************************** */
                $entityManager->persist($user);
                $entityManager->flush();
    
                // generate a signed url and email it to the user
                $this->emailVerifier->sendEmailConfirmation(
                    'app_verify_email',
                    $user,
                    (new TemplatedEmail())
                        ->from(new Address('cinema@noreply.fr', 'xavier'))
                        ->to($user->getEmail())
                        ->subject('Please Confirm your Email')
                        ->htmlTemplate('registration/confirmation_email.html.twig')
                );
                // do anything else you need here, like send an email
    
                return $this->redirectToRoute('app_home');
            }
    
            return $this->render('registration/register.html.twig', [
                'registrationForm' => $form,
            ]);
        }

    Voila mon FormtypeRegister

    public function buildForm(FormBuilderInterface $builder, array $options): void
        {
            $builder
                ->add('email')
                ->add('agreeTerms', CheckboxType::class, [
                    'mapped' => false,
                    'constraints' => [
                        new IsTrue([
                            'message' => 'You should agree to our terms.',
                        ]),
                    ],
                ])
                ->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,
                        ]),
                    ],
                ]);  
    
                $builder->add('salle', CollectionType::class, [
                    'entry_type' => SalleType::class,
    
                ]);
        }




    • Partager sur Facebook
    • Partager sur Twitter
      14 mars 2024 à 16:24:51

      Salut

      Est-ce qu'il y a une raison pour utiliser une collection d'objets Salle puis de les recréer ? Normalement, si les mappings sont bien faits, pas besoin de cela (tant que l'utilisateur a ajouté toutes ses salles). Mais je voudrais bien voir SalleType, je pense qu'actuellement, tu saisis le nombre de salles dans le champ pour le numéro de celle-ci dans ta collection… et il faut du coup traiter un peu plus les données avant de boucler.

      Sinon, je te proposerais d'avoir un autre champ non-mappé pour le nombre de salles à la place de la collection. Et dans ce cas, tu pourrais récupérer ce nombre plus facilement et conserver ta boucle, sans avoir des données "parasites".

      • Partager sur Facebook
      • Partager sur Twitter
        14 mars 2024 à 17:15:01

        Salut 

        Merci de ta réponse. 

        J'ai penser créer un collection pour pouvoir le réutiliser dans mon form register qui est un form imbirquer , et tu as raison je le mets dans numerosalle et j'ai aucun champs pour mettre le nombre de salle de l'user , je devrai donc mettre dans mon entity user un champs nombre de salle? 

        Voila mon salleType. 

        class SalleType extends AbstractType
        {
            public function buildForm(FormBuilderInterface $builder, array $options): void
            {
                $builder
                    ->add('Numerosalle', IntegerType::class, [
                        'label' => 'Nombre de salles',
                        
                    ]);
            }
        
            public function configureOptions(OptionsResolver $resolver): void
            {
                $resolver->setDefaults([
                    'data_class' => Salle::class,
                ]);
            }
        }
        



        • Partager sur Facebook
        • Partager sur Twitter
          14 mars 2024 à 21:52:44

          Non, j'ai parlé d'un « champ "non-mappé" », donc c'est un champ qui n'a pas d'équivalent dans l'entité — comme agreeTerms, dans le même FormType.

          C'est bien ce que je pensais : ton champ se nomme Numerosalle, mais tu lui mets un label Nombre de salles, donc ça prête à confusion, la preuve en est ce sujet.

          • Partager sur Facebook
          • Partager sur Twitter
            15 mars 2024 à 16:05:01

            Ymox a écrit:

            Non, j'ai parlé d'un « champ "non-mappé" », donc c'est un champ qui n'a pas d'équivalent dans l'entité — comme agreeTerms, dans le même FormType.

            C'est bien ce que je pensais : ton champ se nomme Numerosalle, mais tu lui mets un label Nombre de salles, donc ça prête à confusion, la preuve en est ce sujet.


            D'accord merci je vais recommencer de zéro je pense.
            • Partager sur Facebook
            • Partager sur Twitter
              16 mars 2024 à 22:26:45

              Je doute que tu aies besoin de tout recommencer, il faut "juste" changer le champ collection en un champ Integer, faire en sorte que, comme pour le champ agreeTerms, il ne soit pas lié à une propriété de l'entité, et ensuite en récupérer la valeur comme tu tentais de le faire, à ceci près que là où peut-être tu récupérais un tableau avec un unique élément Salle dedans, tu devrais y avoir directement le nombre.

              • Partager sur Facebook
              • Partager sur Twitter
                17 mars 2024 à 9:32:10

                C'est bon j'ai réussie merci à toi
                • Partager sur Facebook
                • Partager sur Twitter
                  17 mars 2024 à 10:01:05

                  Spawnkiller66 a écrit:

                  C'est bon j'ai réussie merci à toi

                  Bonjour,

                  Sujet résolu

                  Tu peux passer le sujet à "résolu" (bouton en haut à droite du sujet) et cliquer sur les pouces levés des messages qui t'ont aidé⋅e ;)

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Mauvais enregistrement en bdd

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