Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Symfony] affiche les erreurs 2 fois

Sujet résolu
    27 mai 2018 à 0:47:25

    Bonsoir tout le monde je viens vous voir car j'ai un problème et je ne trouve vraiment pas de solution (oui c'est encore moi ^^' je suis vraiment désole) 

    alors tout est dans le titre symfony m'affiche 2 fois les message d'erreur mais une image vaut mieux qu'un long discours alors la je ne c'est pas d'ou ça viens j'ai beau vérifier je ne trouve pas mais vraiment 

    alors je vous partage mon code j'utilise FosUserBundle

    d'abord mon entité 

    <?php
    
    namespace App\Entity;
    
    use Doctrine\ORM\Mapping as ORM;
    use FOS\UserBundle\Model\User as BaseUser;
    
    /**
     * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
     * @ORM\Table(name="fos_user")
     */
    class User extends BaseUser
    {
        /**
         * @ORM\Id
         * @ORM\Column(type="integer")
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        protected $id;
    
    
        /**
         * @Assert\Regex("/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).{6,}$/",
         *  message = "Votre mot de passe doit contenir minimum 6 carctère avec une miniscule majuscule un chiffre "
         * )
         *
         * @var string
         */
        //protected $password;
    
    
        /**
         * @ORM\Column(type="string", length=255)
         * @var string
         */
        protected $age;
    
    
        public function getAge(): ?string
        {
            return $this->age;
        }
    
        public function setAge(string $age): self
        {
            $this->age = $age;
    
            return $this;
        }
    
    
        /**
         * Place un rôle unique à l'utilisateur (supprimer tous les anciens rôles)
         * @param string $userRole
         */
        public function setRole(string $userRole)
        {
            // Vider les rôles
            foreach ($this->getRoles() as $role) {
                $this->removeRole($role);
            }
            // Ajout le rôle unique passé en paramètre
            $this->addRole($userRole);
        }
    }

    puis mon formulaire type 

    <?php
    
    namespace App\Form;
    
    use App\Entity\User;
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\Extension\Core\Type\EmailType;
    use Symfony\Component\Form\Extension\Core\Type\NumberType;
    use Symfony\Component\Form\Extension\Core\Type\TextType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\Validator\Constraints as Assert;
    use Symfony\Component\OptionsResolver\OptionsResolver;
    
    class RegistrationType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder->add('age', NumberType::class, [
                'attr' => [
                    'placeholder' => 'votre age entre 8 et 120 ans'
                ],
                'constraints' => [ new Assert\Range([
                    'min' => '8',
                    'max' => '120',
                    'minMessage' => 'Vous devez avoir minimum {{ limit }} ans',
                    'maxMessage' => 'Vous ne pouvez pas faire plus de {{ limit }} ans'
                ])]
            ])
            ->add('username', TextType::class, [
                'constraints' => [ new Assert\Regex([
                    'pattern' => '/^[A-Za-z0-9_-]{5,30}$/',
                    'message' => 'Votre Pseudonyme n\'est pas valide !, ne doit pas dépasser 30 carctère avoir minimum 5 et ne contient que des lettres chiffre et (-,_) !'
                ])]
            ])
            ->add('email', EmailType::class, [
                'constraints' => [ new Assert\Regex([
                    'pattern' => '/^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$/',
                    'message' => 'Votre adresse mail n\'est pas valide !'
                ])]
            ])
            ;
        }
    
        public function getParent()
        {
            return 'FOS\UserBundle\Form\Type\RegistrationFormType';
        }
    
        public function getBlockPrefix()
        {
            return 'app_user_registration';
        }
    
        public function configureOptions(OptionsResolver $resolver)
        {
            $resolver->setDefaults([
                'data_class' => User::class,
            ]);
        }
    
    }

    et enfin ma vue 

    {{ form_start(form, {'method': 'post', 'action': path('fos_user_registration_register')}) }}
       <div class="animate-box">
    
          <h1 class="text-center">Inscrivez vous</h1>
          <div class="form-group">
             {{ form_label(form.username) }}
             {{ form_widget(form.username, {'attr': {'placeholder': 'Un joli pseudonyme qui doit contenir entre 5 et 30 lettres'}}) }}
             {{ form_errors(form.username) }}
    
          </div>
    
          <div class="form-group">
          {{ form_label(form.email) }}
          {{ form_widget(form.email, {'attr': {'placeholder': 'Une adresse mail valide : gmail, hotmail... vous devez confirmer votre inscription par mail'}}) }}
          {{ form_errors(form.email) }}
    
          </div>
    
          <div class="form-group">
          {{ form_label(form.plainPassword.first) }}
          {{ form_widget(form.plainPassword.first, {'attr': {'placeholder': 'Votre mot de passe doit contenir minimum 6 caractères avec une minuscule, une majuscule et un chiffre'}}) }}
          {{ form_errors(form.plainPassword.first) }}
    
          </div>
    
          <div class="form-group">
             {{ form_label(form.plainPassword.second) }}
             {{ form_widget(form.plainPassword.second, {'attr': {'placeholder': 'Votre mot de passe doit être identique'}}) }}
             {{ form_errors(form.plainPassword.second) }}
          </div>
    
          <div class="form-group">
              {{ form_label(form.age) }}
              {{ form_widget(form.age) }}
              {{ form_errors(form.age) }}
          </div>
    
          <div class="form-group">
             <input type="submit" value="Inscription" class="btn btn-primary">
          </div>
    
       </div>
    
    {{ form_end(form) }}
    

    merci de votre aide c'est vraiment urgent car je doit présenter un projet et je doit le rendre au plus vite avant fin mai 

    • Partager sur Facebook
    • Partager sur Twitter
      27 mai 2018 à 1:21:34

      Salut,

      Il faut retirer les form_errors , ils sont automatiquement ajoutés par le thème (boostrap 4 je crois) par défaut de Symfony (tu peux regarder le fichier boostrap_4_layout.html.twig)

      • Partager sur Facebook
      • Partager sur Twitter
      le bienfait n'est jamais perdu
        27 mai 2018 à 1:38:42

        Salut j'ai essayer cette alternative mais regarde ce que ça fait :/

        ce que je comprend pas avec le formulaire de contact ça marche nickel y a que avec le formulaire d'inscriptions que ça me fait ça c'est super bizzare 

        • Partager sur Facebook
        • Partager sur Twitter
          27 mai 2018 à 1:49:33

          Tu n'as plus les messages en double non ? Et puis pour l'email , je crois que c'est à cause de Assert\Regex , en même temps on ne la valide pas par regex.

          Tu peux retirer le champ de ton FormType et laisser FosUser le gérer.

          -
          Edité par WillyKouassi 27 mai 2018 à 1:50:23

          • Partager sur Facebook
          • Partager sur Twitter
          le bienfait n'est jamais perdu
            27 mai 2018 à 1:51:32

            mouais je met une contrainte de type email ? 

            j'aurais aimer savoir si tu c'est comment faire pour afficher le message comme dans le formulaire de contact ?

            • Partager sur Facebook
            • Partager sur Twitter
              27 mai 2018 à 2:01:06

              > mouais je met une contrainte de type email

              je redis ce que j'avais dit: "Tu peux retirer le champ de ton FormType et laisser FosUser le gérer"

              Ton formulaire de contact utilise le même code que celui-ci, je veux dire en terme de disposition ?

              • Partager sur Facebook
              • Partager sur Twitter
              le bienfait n'est jamais perdu
                27 mai 2018 à 2:08:24

                non il utilise pas le même code car pour mon formulaire de contact je n'est pas d'entité juste  un formulaire et une vue avec un controller qui gère l'envoie de mail 

                mais si je ne veux pas que FosUser géré le type mail je fait comment pour ne pas afficher 2 message d'erreur ? car j'ai retiré form_errors mais ça m'affiche quand même 2 erreur de type mail c'est bizarre 

                • Partager sur Facebook
                • Partager sur Twitter
                  27 mai 2018 à 3:16:17

                  Qu'est-ce que tu apportes de plus que la validation par défaut de FosUser ? Une regex ?  Et tu penses que t'en a besoin ?

                  Maintenant tu peux persister avec Assert\Regex , mais surtout ne trouve pas bizarre d'avoir 2 erreurs car j'ai tenté en vain de l'expliquer.

                  -
                  Edité par WillyKouassi 27 mai 2018 à 3:22:48

                  • Partager sur Facebook
                  • Partager sur Twitter
                  le bienfait n'est jamais perdu

                  [Symfony] affiche les erreurs 2 fois

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown