J'utilise Symfony 5.3
Je voudrais realiser des validation sur un fomulaire d'enregistrement classique avec 4 champs :, nom email, mot de passe et repetition de mot de passe.
toutes les contraintes de validation marche bien sauf une qui verifier si l'email existe ou non dans la base de donnée.

"<?php

namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

/**

  • @ORM\Entity(repositoryClass=UserRepository::class)
  • @UniqueEntity(fields={"email"}, message="Email déjà utilisé !")
    */
    class User implements UserInterface
    {
    /**

    • @ORM\Id
    • @ORM\GeneratedValue
    • @ORM\Column(type="integer")
      */
      private $id;

    /**

    • @ORM\Column(type="string", length=255)
    • @Assert\Email
      */
      private $email;

    /**

    • @ORM\Column(type="string", length=255)
      */
      private $username;

    /**

    • @ORM\Column(type="string", length=255)
    • @Assert\Length(
    • min = 8,
    • minMessage = "Password must be at least {{ limit }} characters long")
      */
      private $password;

    /**

    • @Assert\EqualTo(propertyPath="password", message="vous n'avez pas entrer le meme mot de passe")
      */
      public $confirme_password;

    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;

    }

    public function getUsername(): ?string
    {
    return $this->username;
    }

    public function setUsername(string $username): self
    {
    $this->username = $username;

    return $this;

    }

    public function getPassword(): ?string
    {
    return $this->password;
    }

    public function setPassword(string $password): self
    {
    $this->password = $password;

    return $this;

    }

    public function getSalt(){}
    public function eraseCredentials(){}
    public function getUserIdentifier(){}
    public function getRoles()

    {
    return array('ROLE_USER');
    }
    }
    "
    Ce que je veux

Je voudrai empecher l'utilisateur pour qu'il ne rentre pas un email existant dans ma base de donnée .

Ce que j'obtiens
Dès que j'ajoute cette annotation * @UniqueEntity(fields={"email"}, message="Email déjà utilisé !") je valide le formulaire et j'obtien ce message d erreur :
The "App\Entity\User" entity has a repositoryClass set to "App\Entity\UserRepository", but this is not a valid class. Check your class naming. If this is meant to be a service id, make sure this service exists and is tagged with "doctrine.repository_service".

3 réponses


Salut man, tu n'a pas mis de contraintes unique= true sur la propriéte. Tu dois respecter les deux niveau de contraintes

@ORM\Column(type="string", length=255, unique=true)
@Assert\Email
*/
private $email;

sans oublier de faire l'update de ta base de données