src/Entity/User.php line 23

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use Doctrine\Common\Collections\ArrayCollection;
  4. use Doctrine\Common\Collections\Collection;
  5. use Doctrine\ORM\Mapping as ORM;
  6. use App\Repository\UserRepository;
  7. use Symfony\Component\Validator\Constraints as Assert;
  8. use Symfony\Component\Security\Core\User\UserInterface;
  9. use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  10. use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
  11. /**
  12.  * @ORM\Entity(repositoryClass=UserRepository::class)
  13.  * @UniqueEntity(
  14.  * fields = {"email"},
  15.  * message = "Cet email et déjà associé à un compte")
  16.  */
  17. class User implements UserInterfacePasswordAuthenticatedUserInterface
  18. {
  19.     /**
  20.      * @ORM\Id
  21.      * @ORM\GeneratedValue
  22.      * @ORM\Column(type="integer")
  23.      */
  24.     private $id;
  25.     /**
  26.      * @ORM\Column(type="string", length=255)
  27.      * @Assert\Email(
  28.      *     message = "'{{ value }}' n'est pas un email,   ex : nom@domaine.com."
  29.      * )
  30.      */
  31.     private $email;
  32.     // pattern ="/^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[-+!*$€@%_])([-+!*$€@%_\w]{8,15})$/",
  33.     /**
  34.      * @ORM\Column(type="string", length=255)
  35.      * @Assert\NotBlank (message="Veuillez saisir un mot de passe")
  36.      * @Assert\Regex(
  37.      *  pattern ="/^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[-+!*$€@%_])([-+!*$€@%_\w]{8,15})$/",
  38.      *  message="8-15 caractères, au moins: 1 majuscule 1 minuscule  1 car. parmi - + ! * $ € @ % _"
  39.      * )
  40.      */
  41.     private $password;
  42.     /**
  43.      * @ORM\Column(type="string", length=255)
  44.      * @Assert\NotBlank (message="Veuillez saisir votre nom")
  45.      */
  46.     private $nom;
  47.     /**
  48.      * @ORM\Column(type="string", length=255)
  49.      * @Assert\NotBlank (message="Veuillez saisir votre prenom")
  50.      */
  51.     private $prenom;
  52.      // avec l'implémentation de la classe UserInterface il faut créer la propriété "role" et l'implementer dans la base de donnée
  53.     /**
  54.      * @ORM\Column(type="json")
  55.      */
  56.     private $roles = ['ROLE_USER'];
  57.     /**
  58.      * @ORM\OneToMany(targetEntity=Adresse::class, mappedBy="user", orphanRemoval=true)
  59.      */
  60.     private $adresses;
  61.     /**
  62.      * @ORM\Column(type="datetime", nullable=true)
  63.      */
  64.     private $date_inscription;
  65.     /**
  66.      * @ORM\OneToMany(targetEntity=Commande::class, mappedBy="user")
  67.      */
  68.     private $commandes;
  69.     public function __construct()
  70.     {
  71.         $this->adresses = new ArrayCollection();
  72.         $this->commandes = new ArrayCollection();
  73.     }  // ROLE_USER est défini dans security.yaml, il peut y avoir plusieurs Roles avec des hierarchies c'est donc un objet qui sera un tableau en BDD SQL , par defaut il est au niveau hierarchique le plus bas
  74.     public function getId(): ?int
  75.     {
  76.         return $this->id;
  77.     }
  78.     public function getEmail(): ?string
  79.     {
  80.         return $this->email;
  81.     }
  82.     public function setEmail(string $email): self
  83.     {
  84.         $this->email $email;
  85.         return $this;
  86.     }
  87.     /**
  88.      * @return string the hashed password for this user
  89.      */
  90.     public function getPassword(): ?string
  91.     {
  92.         return $this->password;
  93.     }
  94.     public function setPassword(string $password): self
  95.     {
  96.         $this->password $password;
  97.         return $this;
  98.     }
  99.     public function getNom(): ?string
  100.     {
  101.         return $this->nom;
  102.     }
  103.     public function setNom(string $nom): self
  104.     {
  105.         $this->nom $nom;
  106.         return $this;
  107.     }
  108.     public function getPrenom(): ?string
  109.     {
  110.         return $this->prenom;
  111.     }
  112.     public function setPrenom(string $prenom): self
  113.     {
  114.         $this->prenom $prenom;
  115.         return $this;
  116.     }
  117.    
  118.     /**
  119.      * l'entité User est différente des autres entités , car c'est par cette entité qu'un utilisateur va pourvoir s'authentifier, Symfony a déja créé toute la sécurité et il demande à la classe User d'implémenter la classe UserInterface 
  120.      * Il faut donc Implementer des méthodes de cette classe 
  121.      */
  122.     // identification, dire qu'elle propriété sert à l'identification
  123.     // on doit l'implementer (demnandée par la classe implementée) mais elle n'est plus utilisée depuis la version  5.3 on utilise la getUserIdentifier , il faut nénamoins l'implémenter pendant la transition
  124.     public function getUsername(): ?string {
  125.         return $this->email;
  126.     }
  127.     // identification, dire qu'elle propriété sert à l'identification
  128.     public function getUserIdentifier(): ?string {
  129.        return $this->email;
  130.    }
  131.    //Roles 
  132.    public function getRoles(): ?array {
  133.        $roles $this->roles;
  134.        return array_unique($roles); 
  135.    }
  136.    public function setRoles($role
  137.    {
  138.        $this->roles $role;
  139.        return $this ;
  140.    }
  141.    /**
  142.      * Returns the salt that was originally used to hash the password.
  143.      *
  144.      * This can return null if the password was not hashed using a salt.
  145.      *
  146.      *
  147.      * @return string|null
  148.      */
  149.    public function getSalt() {} // renvoie la string password non encodé que l'utilisateur a saisi
  150.    
  151.    public function eraseCredentials(){} // nettoie le mdp
  152.    
  153.    /**
  154.     * @return Collection|Adresse[]
  155.     */
  156.    public function getAdresses(): Collection
  157.    {
  158.        return $this->adresses;
  159.    }
  160.    public function addAdress(Adresse $adress): self
  161.    {
  162.        if (!$this->adresses->contains($adress)) {
  163.            $this->adresses[] = $adress;
  164.            $adress->setUser($this);
  165.        }
  166.        return $this;
  167.    }
  168.    public function removeAdress(Adresse $adress): self
  169.    {
  170.        if ($this->adresses->removeElement($adress)) {
  171.            // set the owning side to null (unless already changed)
  172.            if ($adress->getUser() === $this) {
  173.                $adress->setUser(null);
  174.            }
  175.        }
  176.        return $this;
  177.    }
  178.    public function getDateInscription(): ?\DateTimeInterface
  179.    {
  180.        return $this->date_inscription;
  181.    }
  182.    public function setDateInscription(\DateTimeInterface $date_inscription): self
  183.    {
  184.        $this->date_inscription $date_inscription;
  185.        return $this;
  186.    }
  187.    /**
  188.     * @return Collection|Commande[]
  189.     */
  190.    public function getCommandes(): Collection
  191.    {
  192.        return $this->commandes;
  193.    }
  194.    public function addCommande(Commande $commande): self
  195.    {
  196.        if (!$this->commandes->contains($commande)) {
  197.            $this->commandes[] = $commande;
  198.            $commande->setUser($this);
  199.        }
  200.        return $this;
  201.    }
  202.    public function removeCommande(Commande $commande): self
  203.    {
  204.        if ($this->commandes->removeElement($commande)) {
  205.            // set the owning side to null (unless already changed)
  206.            if ($commande->getUser() === $this) {
  207.                $commande->setUser(null);
  208.            }
  209.        }
  210.        return $this;
  211.    }
  212. }// fin de classe