Bonjour,
Voila je rencontre un petit problème avec mon code.
Ce que je fais
Je cherche a encoder une entité User en Json mais quand je demande au serializer de le normalizer j'ai une erreur.
Voici mon entité User :
<?php
namespace App\Entity;
use DateTime;
use Doctrine\ORM\Mapping as ORM;
use App\Repository\UserRepository;
use Doctrine\Common\Collections\Collection;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Serializer\Annotation\Groups;
/**
* @ORM\Entity(repositoryClass=UserRepository::class)
*/
class User
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
* @Groups("user:read")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
* @Groups("user:read")
*/
private $prenom;
/**
* @ORM\Column(type="string", length=255)
* @Groups("user:read")
*/
private $nom;
/**
* @ORM\Column(type="string", length=255)
* @Groups("user:read")
*/
private $mail;
/**
* @ORM\Column(type="string", length=255)
* @Groups("user:read")
*/
private $hashmdp;
/**
* @ORM\Column(type="boolean")
* @Groups("user:read")
*/
private $actif = true;
/**
* @ORM\Column(type="boolean")
* @Groups("user:read")
*/
private $abonnement = true;
/**
* @ORM\Column(type="string", length=255)
* @Groups("user:read")
*/
private $tel;
/**
* @ORM\Column(type="string", length=255)
* @Groups("user:read")
*/
private $image;
/**
* @ORM\Column(type="datetime")
* @Groups("user:read")
*/
private $date_inscription;
/**
* @ORM\OneToMany(targetEntity=News::class, mappedBy="user")
*/
private $listNews;
/**
* @ORM\ManyToOne(targetEntity=Role::class, inversedBy="user")
* @ORM\JoinColumn(nullable=false)
*/
private $role;
public function __construct()
{
$this->listNews = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getPrenom(): ?string
{
return $this->prenom;
}
public function setPrenom(string $prenom): self
{
$this->prenom = $prenom;
return $this;
}
public function getNom(): ?string
{
return $this->nom;
}
public function setNom(string $nom): self
{
$this->nom = $nom;
return $this;
}
public function getMail(): ?string
{
return $this->mail;
}
public function setMail(string $mail): self
{
$this->mail = $mail;
return $this;
}
public function getHashmdp(): ?string
{
return $this->hashmdp;
}
public function setHashmdp(string $hashmdp): self
{
$this->hashmdp = $hashmdp;
return $this;
}
public function getActif(): ?bool
{
return $this->actif;
}
public function setActif(bool $actif): self
{
$this->actif = $actif;
return $this;
}
public function getAbonnement(): ?bool
{
return $this->abonnement;
}
public function setAbonnement(bool $abonnement): self
{
$this->abonnement = $abonnement;
return $this;
}
public function getTel(): ?string
{
return $this->tel;
}
public function setTel(string $tel): self
{
$this->tel = $tel;
return $this;
}
public function getImage(): ?string
{
return $this->image;
}
public function setImage(string $image): self
{
$this->image = $image;
return $this;
}
public function getDateInscription(): ?\DateTimeInterface
{
return $this->date_inscription;
}
public function setDateInscription(\DateTimeInterface $date_inscription): self
{
$this->date_inscription = $date_inscription;
return $this;
}
/**
* @return Collection|News[]
*/
public function getListNews(): Collection
{
return $this->listNews;
}
public function addNews(News $news): self
{
if (!$this->listNews->contains($news)) {
$this->listNews[] = $news;
$news->setUser($this);
}
return $this;
}
public function removeNews(News $news): self
{
if ($this->listNews->contains($news)) {
$this->listNews->removeElement($news);
// set the owning side to null (unless already changed)
if ($news->getUser() === $this) {
$news->setUser(null);
}
}
return $this;
}
public function getRole(): ?Role
{
return $this->role;
}
public function setRole(?Role $role): self
{
$this->role = $role;
return $this;
}
public function addListNews(News $listNews): self
{
if (!$this->listNews->contains($listNews)) {
$this->listNews[] = $listNews;
$listNews->setUser($this);
}
return $this;
}
public function removeListNews(News $listNews): self
{
if ($this->listNews->contains($listNews)) {
$this->listNews->removeElement($listNews);
// set the owning side to null (unless already changed)
if ($listNews->getUser() === $this) {
$listNews->setUser(null);
}
}
return $this;
}
}
Et voici mon controler :
namespace App\Controller;
use App\Repository\UserRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Serializer\SerializerInterface;
class UserController extends AbstractController
{
/**
* @Route("/users", name="users")
*/
public function index(UserRepository $userRepository, SerializerInterface $serializerInterface)
{
$users = $userRepository->findAll();
$json = $serializerInterface->serialize($users, 'json', ['groups' => 'user:read']);
dd($json);
return new JsonResponse($json, 200, [], true);
}
}
Ce que je veux
Je cherche a obtenir tous les champ qui on le tag @Groups("user:read") sous format json.
Apres m'ettre renseigner un peut j'ai peut etre une piste avec la création d'un normalizer custom meme si je comprend pas pourquoi je devrais en faire un, je pensez que le serialiser le fearais tous seul.
Ce que j'obtiens
Sur une requette get sur l'adresse http://127.0.0.1:8000/users j'ai comme erreur Could not normalize object of type "App\Entity\User", no supporting normalizer found.
Voila si quelqu'un pourrais m'aidez (rapidement si possible :) ) ça serais sympatique
Cordialement
Dénez Fauchon