Formulaire renvoi valeurs NULL

a marqué ce sujet comme résolu.

Attention, is_numeric vérifie que la chaîne passée en paramètre contient un nombre valide sous forme de chaîne. Donc s’il y a des lettres qui n’entrent pas dans l’hexadécimal, et au moindre espace ou la moindre virgule, la fonction retourne false, sauf erreur.

Je ne comprends pas non-plus l’erreur que te génère Symfony. C’est à quelle étape exactement qu’elle survient ? A l’appel de setPhoneN1() ?

+0 -0

Attention, is_numeric vérifie que la chaîne passée en paramètre contient un nombre valide sous forme de chaîne. Donc s’il y a des lettres qui n’entrent pas dans l’hexadécimal, et au moindre espace ou la moindre virgule, la fonction retourne false, sauf erreur.

Justement, c’est ce que je veux. ^^ Un numéro de téléphone ne contient que des entiers et il me faut vérifier ça et comme le type TelType renvoie sous format string… (ce qui est con au passage).

Sinon, voilà mon code pour l’inscription qui fonctionne correctement. Cela doit être au moment où je récupère les données qu’il gueule. Mais ce que je ne comprends pas, c’est que pour mes autres assertions, cela fonctionne correctement.

<?php
    /**
     * @Route("inscription", name="registration")
     * Description : S'occupe de la phase d'inscription de l'utilisateur
     */
    public function register(Request $request, UserPasswordEncoderInterface $encoder, \Swift_Mailer $mailer)
    {
        $user = new User();
        $form = $this->createForm(RegisterType::class, $user);

        //Gestion des données renvoyées
        $form->handleRequest($request);

        if($form->isSubmitted() && $form->isValid())
        {
            //Récupération des données envoyées par le formulaire
            $user = $form->getData();

            //Encodage du mot de passe
            $password = $encoder->encodePassword($user, $user->getPassword());
            $user->setPassword($password)
                ->setIsActive(false);

            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($user);

            //Envoie d'une requête pour vérifier que le pseudo n'existe déjà pas
            $checkUser = $this->getDoctrine()->getRepository(User::class)->findOneBy(array(
                'username' => $user->getUsername()
            ));

            //Vérification également que l'email n'est déjà pas utilisé
            $checkEmail = $this->getDoctrine()->getRepository(User::class)->findOneBy(array(
                'email' => $user->getEmail()
            ));

            //Si le pseudo et l'email ne sont pas utilisés
            if(!$checkUser)
            {
                if(!$checkEmail)
                {
                    //Génération du hash et de l'URL pour l'email de confirmation
                    $hash = sha1(random_int(1, 1000));
                    $user->setHash($hash);

                    //Lien de confirmation qui sera envoyé à l'utilisateur
                    $slug = $user->getHash() . '&' . $user->getEmail();

                    $email = (new \Swift_Message('Email'))
                        ->setSubject('xxxxxxxxxxxxxxxxxxxxx')
                        ->setFrom("xxxxx@xxxxxxxxxx")
                        ->setTo($user->getEmail())
                        ->setBody(
                            $this->renderView(
                                'emails/emailRegistration.html.twig',
                                array(
                                    'firstName' => $user->getFirstName(),
                                    'slug' => $slug
                                )
                            )
                        )
                        ->setContentType('text/html');

                    $entityManager->flush();

                    $this->addFlash('success', 'Inscription réussie avec succès ! Veuillez activer votre compte (vérifiez vos spams)');
                    $mailer->send($email);

                    return $this->redirectToRoute('index');
                }
                else
                    $form->get('email')->addError(new FormError('L\'adresse email est déjà utilisée'));
            }
            else
            {
                $form->get('username')->addError(new FormError('Pseudo déjà existant'));
            }
        }
?>

[…] le type TelType renvoie sous format string… (ce qui est con au passage).

Charvalos

Moi je ne trouve pas, dans la mesure ou tu peux avoir un site qui est prévu pour une région (au sens très large) particulière, et du coup tu peux enregistrer les numéros de téléphone au format saisi, tant que c’est celui que tu souhaites (avec des espaces pour regrouper les nombres, ou des tirets, ou des slashes, etc.).
Après, je conçois que ce serait sympa si, comme pour DateType où tu peux choisir d’avoir un objet DateTime ou une chaîne de caractères, tu puisses choisir entre nombre ou chaîne. Mais c’est bien moins facile à afficher au bon format.


Tu sembles dire que c’est pendant le handleRequest() que ça ne passe pas, j’ai bien compris ?

Si jamais, tu as la contrainte UniqueEntity qui devrait t’intéresser pour ne pas avoir à vérifier explicitement l’unicité des nom d’utilisateur et e-mail.

+0 -0

[…] le type TelType renvoie sous format string… (ce qui est con au passage).

Charvalos

Moi je ne trouve pas, dans la mesure ou tu peux avoir un site qui est prévu pour une région (au sens très large) particulière, et du coup tu peux enregistrer les numéros de téléphone au format saisi, tant que c’est celui que tu souhaites (avec des espaces pour regrouper les nombres, ou des tirets, ou des slashes, etc.).
Après, je conçois que ce serait sympa si, comme pour DateType où tu peux choisir d’avoir un objet DateTime ou une chaîne de caractères, tu puisses choisir entre nombre ou chaîne. Mais c’est bien moins facile à afficher au bon format.

Ou alors, avoir le choix du format renvoyé. Mais là n’est pas la discussion. ^^

Tu sembles dire que c’est pendant le handleRequest() que ça ne passe pas, j’ai bien compris ?

Soit là, soit au moment du $user = $form->getData();

Si jamais, tu as la contrainte UniqueEntity qui devrait t’intéresser pour ne pas avoir à vérifier explicitement l’unicité des nom d’utilisateur et e-mail.

Ymox

Ah, je ne connaissais pas cette contrainte. Je vais aller voir.

EDIT :

J’ai rajouter les deux assertions UniqueEntity et cela fonctionne correctement. Alors, pourquoi, celles sur le numéro de téléphone ne fonctionnent pas ?? :colere:

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte