Partage
  • Partager sur Facebook
  • Partager sur Twitter

message d'erreur Symfony 4 form assert

message d'erreur qui ne s'affiche pas correctement

Sujet résolu
    17 octobre 2018 à 16:41:03

    Bonjour,

    J'utilise la validation de Symfony4 pour mes champs de formulaires en leurs rajoutant des contraintes (par exemple je ne veux pas que mon émail soit présent 2 fois dans la base de données). 

    j'use bien, je fait bien le require nécessaire de la documentation et je mes bien les "commentaires" nécessaire dans mon entity . Mais ca me donne ça :

    au lieu de :

    Mon formulaire :
    <!-- Formulaire -->
    {{ form_start(form) }}
    {{ form_row(form.email, {'attr':{'placeholder': 'Your email...', 
                                                    'required':'true',
                                                    }}) }}
    {{ form_row(form.password)}}
    {{ form_row(form.confirm_password, {'label':'Confirm Password' }) }}
      <button type="submit" class="btn btn-lg gradient secondary btn-block waves-effect waves-light mt-20 mb-20">Create an account</button>
              <div class="links">
                  <a href="/login.html">Already have an account? Click here</a>
              </div>
               <div class="checkbox">
                    <input type="checkbox" name="accept-terms" value="1" id="accept-terms" required/>
                    <label for="accept-terms">I have read and I accept the <a href="#!" target="_blank">Terms Of Use</a></label>
               </div>
    {{ form_end(form) }}
    Dans mon entity Candidate :
    <?php
    
    namespace App\Entity;
    
    use Doctrine\Common\Collections\ArrayCollection;
    use Doctrine\Common\Collections\Collection;
    use Doctrine\ORM\Mapping as ORM;
    //le composant de validation (faire un composer require symfony:validator doctrine/annotations)
    use Symfony\Component\Validator\Constraints as Assert;
    //encodage
    use Symfony\Component\Security\Core\User\UserInterface;
    //email unique
    use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
    
    
    /**
     * Candidate
     *
     * @ORM\Table(name="candidate", uniqueConstraints={@ORM\UniqueConstraint(name="email_UNIQUE", columns={"email"})})
     * @ORM\Entity
     * @UniqueEntity(
     *  fields = {"email"},
     *  message = "This email has been already used"
     * )
     */
    class Candidate implements UserInterface
    {
        /**
         * @var int
         *
         * @ORM\Column(name="id", type="integer", nullable=false)
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="IDENTITY")
         */
        private $id;
    
        /**
         * @var string|null
         *
         * @ORM\Column(name="first_name", type="string", length=255, nullable=true)
         */
        private $firstName;
    
        /**
         * @var string|null
         *
         * @ORM\Column(name="last_name", type="string", length=255, nullable=true)
         */
        private $lastName;
    
        /**
         * @var string|null
         *
         * @ORM\Column(name="email", type="string", length=255, nullable=true)
         * @Assert\Email()
         */
        private $email;
    
        /**
         * @var string|null
         *
         * @ORM\Column(name="password", type="string", length=255, nullable=true)
         * @Assert\Length(min="5", minMessage="Must be greater than 5 characters")
         */
        private $password;
    
        /**
         *
         * @Assert\EqualTo(propertyPath="password", message="Do not match password")
         */
        private $confirm_password;
    
        /**
         * @var \DateTime|null
         *
         * @ORM\Column(name="created_at", type="datetime", nullable=true)
         */
        private $createdAt;
    
        /**
         * @var \DateTime|null
         *
         * @ORM\Column(name="deleted_at", type="datetime", nullable=true)
         */
        private $deletedAt;
    
        /**
         * @var \DateTime|null
         *
         * @ORM\Column(name="updated_at", type="datetime", nullable=true)
         */
        private $updatedAt;
    
        /**
         * @var \Doctrine\Common\Collections\Collection
         *
         * @ORM\ManyToMany(targetEntity="JobOffer", inversedBy="candidate")
         * @ORM\JoinTable(name="candidacy",
         *   joinColumns={
         *     @ORM\JoinColumn(name="candidate_id", referencedColumnName="id")
         *   },
         *   inverseJoinColumns={
         *     @ORM\JoinColumn(name="job_offer_id", referencedColumnName="id")
         *   }
         * )
         */
        private $jobOffer;
    
        /**
         * Constructor
         */
        public function __construct()
        {
            $this->jobOffer = new \Doctrine\Common\Collections\ArrayCollection();
        }
    
        public function getId(): ?int
        {
            return $this->id;
        }
    
        public function getEmail(): ?string
        {
            return $this->email;
        }
    
        public function setEmail(?string $email): self
        {
            $this->email = $email;
    
            return $this;
        }
    
        // pour encoder Les 5 méthodes néssacaire à UsersInterdace
        public function getPassword(): ?string
        {
            return $this->password;
        }
    
        public function setPassword(?string $password): self
        {
            $this->password = $password;
    
            return $this;
        }
    
        public function eraseCredentials()
        {
    
        }
    
        public function getUsername()
        {
            return $this->email;
        }
        public function getRoles()
        {
            
        }
    
        public function getSalt()
        {
            return  null;
        }

    //fin public function getCreatedAt(): ?\DateTimeInterface { return $this->createdAt; } public function setCreatedAt(?\DateTimeInterface $createdAt): self { $this->createdAt = $createdAt; return $this; } public function getDeletedAt(): ?\DateTimeInterface { return $this->deletedAt; } public function setDeletedAt(?\DateTimeInterface $deletedAt): self { $this->deletedAt = $deletedAt; return $this; } public function getUpdatedAt(): ?\DateTimeInterface { return $this->updatedAt; } public function setUpdatedAt(?\DateTimeInterface $updatedAt): self { $this->updatedAt = $updatedAt; return $this; } /** * @return Collection|JobOffer[] */ public function getJobOffer(): Collection { return $this->jobOffer; } public function addJobOffer(JobOffer $jobOffer): self { if (!$this->jobOffer->contains($jobOffer)) { $this->jobOffer[] = $jobOffer; } return $this; } public function removeJobOffer(JobOffer $jobOffer): self { if ($this->jobOffer->contains($jobOffer)) { $this->jobOffer->removeElement($jobOffer); } return $this; } }
    Pour la méthode dans mon Controller :
    <?php
    
    namespace App\Controller;
    
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Component\Routing\Annotation\Route;
    use App\Entity\Candidate;
    use App\Form\RegistrationType;
    use Symfony\Component\HttpFoundation\Request;
    use \Doctrine\Common\Persistence\ObjectManager;
    use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
    
    class SecurityController extends AbstractController
    {
        // méthode qui permet d'enregistrer un utilisateur.
        /**
         *@Route("/register", name="register")
         */
      
        public function registration(Request $request, ObjectManager $manager, UserPasswordEncoderInterface $encoder )
        {
            /* A partir de l'objet Candidat, je veux ... */
            $canditate = new Candidate();
    
            /* creer et annalyser */
            //crer un formulaire en utilisant le form RegistrationType avec l'objet Candidat
            $form = $this->createForm(RegistrationType::class, $canditate);
            //annalyser des champs avec handleRequest
            $form->handleRequest($request);
    
            /*l'enregistrement dans la base de donnée */
            //si le formulaire est submit ET valide 
            if ($form->isSubmitted() && $form->isValid()) {
    
                // encoder notre mot de passe de l'objet candidate et lire la colonne password
                $hash = $encoder->encodePassword($canditate, $canditate->getPassword());
                //changer la valeur dans colonne password
                $canditate->setPassword($hash);
                
                //le faire persister dans le temps, c'est une prépation pour la requête SQl
                $manager->persist($canditate);
                //enregistrement véritable de la requete SQl. On met les données dans la table
                $manager ->flush();
            
            }
            return $this->render('security/register.html.twig' , [
                'form' => $form->createView()
            ]);
        }
    
    }
    


    je vous remercie d'avance pour vos idée pour pouvoir afficher mon message d'erreur correctement ;) . J'aimerai évité de faire le CSS alors que symfony à une configuration d'affichage par défaut ;) .

    -
    Edité par Cielphis 17 octobre 2018 à 16:57:32

    • Partager sur Facebook
    • Partager sur Twitter
      18 octobre 2018 à 16:28:52

      Bonjour,

      Je ne suis pas bien sûr de saisir ton problème, mais si tu souhaite seulement modifier l'affichage des erreurs, voici la documentation de symfony :

      https://symfony.com/doc/current/validation/translations.html

      a+

      • Partager sur Facebook
      • Partager sur Twitter
        18 octobre 2018 à 19:10:06

        Oui, je voudrais modifié mon affichage d'erreur sans utilisé de css, j'ai vus la video de Lior, et dedans son erreur s'affichait correctement sans qu'il touche vraiment quoi que ce soit en particulié. J'ai regardé la documentation, je pense qu'on peut faire autrement ^^

        Merci pour ta reponse quand même ikanaweb, mais bon la documentation du framework, c'est toujours là première chose que tu fais avant même de poser une question. Mais j'ai conscient que je t'ai un peu perdu.

        J'aimerai un message d'erreur de ce type ;)

        -
        Edité par Cielphis 18 octobre 2018 à 20:18:09

        • Partager sur Facebook
        • Partager sur Twitter
          18 octobre 2018 à 20:24:00

          Salut !

          Est-ce que tu travailles bien avec Symfony 4.1 et Bootstrap 4.0 ? Je sais qu'il y a eu des changements avec Bootstrap 4.1 et que ce n'était pas disponible avec Symfony 4.0 et en-dessous.

          • Partager sur Facebook
          • Partager sur Twitter
            18 octobre 2018 à 20:48:12

            Je pense que le meilleurs moyen pour moi et de bien visualisé la video de Lior( symfony 4, 1 heure pour apprendre l'authentification ) lors de la création de son formulaire symfony. Comme tu peux le voir le miens de formulaire ne comporte aucune class boostrap, donc meme si j'aurai eu la derniere version sur mon projet, je pense pas qu'il peut faire le lien . Sinon j'ai bien installé Symfony quatre ;). 

            Merci pour vos idées, je pense que c'est un truc tout bête pour afficher les erreurs de symfony par défaut,  mais ce n'est pas le plus important dans le code, surtout si je peux y remedier avec le css^^

            • Partager sur Facebook
            • Partager sur Twitter
              18 octobre 2018 à 22:52:59

              Tu as bien fait attention aux "sous-versions" que j'ai mentionnées ? Parce que tu ne parles que de Bootstrap en général et de Symfony 4 sans préciser, et c'était pas pour faire joli que j'avais fait la distinction.

              • Partager sur Facebook
              • Partager sur Twitter
                23 octobre 2018 à 18:09:41

                c'est bon mon erreur était bien avec bootstrap , et j'arrive bien à avoir les erreurs^^ Je suis retournée voir la vidéo numéro 2, et effectivement, j'avais oublié quelques étapes . Merci à vous deux ;)
                • Partager sur Facebook
                • Partager sur Twitter
                  6 août 2019 à 12:22:52

                  Bonjour,

                  Je déterre un peu le sujet mais je rencontre le même problème...

                  Peux-tu stp expliquer quelle a été la solution pour résoudre ce problème d'affichage.

                  Merci

                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 août 2019 à 17:57:55

                    Bonsoir Messieurs dames,
                    j'ai le même problème.
                    J'utilise Bootstrap 4 avec symfony 4.3 et les messages d'erreur ne s'affichent plus,
                    alors qu'ils s'affichaient parfaitement avec symfony 4.2.
                    Certaines choses m'échappent… :-(
                    • Partager sur Facebook
                    • Partager sur Twitter

                    message d'erreur Symfony 4 form assert

                    × 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