Quantcast
Channel: Active questions tagged rest - Stack Overflow
Viewing all articles
Browse latest Browse all 3655

Symfony 4.2 API => Empty Collections with groups

$
0
0

beginner here.I'm trying for my first api to use groups and to serialize with those groups, but on api route call, my collections properties are empty.I'm also trying to do it without api platform from now.I got this when i reach the route (127.0.0.1:8000/test/user/5):Api call

I've search a lot but i dont understand what i'm supposed to do ...

Here's my controller :

<?phpnamespace App\Controller;use App\Repository\UserRepository;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Routing\Annotation\Route;use Symfony\Component\Serializer\SerializerInterface;class ApiUserController extends AbstractController{    /**     * @Route("/test/users", name="api_users")     * @param UserRepository $userRepository     * @param SerializerInterface $serializer     * @return Response     */    public function index(UserRepository $userRepository, SerializerInterface $serializer): Response    {        $users = $userRepository->findAll();        $json = $serializer->serialize($users, 'json',['groups'=>'user:read']);        return new Response($json,200, ["content-type" => "application/json"        ]);    }    /**     * @Route("/test/user/{id}", name="api_user")     * @param UserRepository $userRepository     * @param SerializerInterface $serializer     * @param int $id     * @return Response     */    public function userCall(UserRepository $userRepository, SerializerInterface $serializer, int $id): Response    {        $user = $userRepository->find($id);        $json = $serializer->serialize($user, 'json',['groups'=>'user:get']);        return new Response($json,200, ["content-type" => "application/json"        ]);    }}

and here's my entity :

<?phpnamespace App\Entity;use ApiPlatform\Core\Annotation\ApiResource;use App\Repository\UserRepository;use Doctrine\Common\Collections\ArrayCollection;use Doctrine\Common\Collections\Collection;use Doctrine\ORM\Mapping as ORM;use Symfony\Component\Security\Core\User\UserInterface;use Symfony\Component\Serializer\Annotation\Groups;/** * @ORM\Entity(repositoryClass=UserRepository::class) * @ORM\Table(name="`user`") */class User implements UserInterface{    /**     * @ORM\Id     * @ORM\GeneratedValue     * @ORM\Column(type="integer"),     * @Groups({"user:read","user:get"})     */    private $id;    /**     * @ORM\Column(type="string", length=180, unique=true),     * @Groups({"user:read","user:write","user:get"})     *     */    private $email;    /**     * @ORM\Column(type="json")     * @Groups({"user:read","user:get"})     */    private $roles = [];    /**     * @var string The hashed password     * @ORM\Column(type="string"),     * @Groups({"user:write","user:get"})     */    private $password;    /**     * @ORM\Column(type="string", length=255),     * @Groups({"user:read","user:write","user:get"})     *     */    private $firstname;    /**     * @ORM\Column(type="string", length=255),     * @Groups({"user:read","user:write","user:get"})     *     */    private $lastname;    /**     * @ORM\Column(type="string", length=255, nullable=true),     * @Groups({"user:read","user:write","user:get"})     *     */    private $profile_picture;    /**     * @ORM\ManyToMany(targetEntity=Appartment::class, mappedBy="current_tenant")     * @Groups({"user:get"})     */    private $occupied_appartments;    /**     * @ORM\ManyToMany(targetEntity=Appartment::class, mappedBy="landlord")     * @Groups({"user:get"})     */    private $rented_appartments;    /**     * @ORM\ManyToMany(targetEntity=Rental::class, mappedBy="tenant_id")     * @Groups({"user:get"})     */    private $tenant_rentals;    /**     * @ORM\ManyToMany(targetEntity=Rental::class, mappedBy="landlord_id")     * @Groups({"user:get"})     */    private $landlord_rentals;    public function __construct()    {        $this->occupied_appartments = new ArrayCollection();        $this->rented_appartments = new ArrayCollection();        $this->tenant_rentals = new ArrayCollection();        $this->landlord_rentals = new 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;    }    /**     * A visual identifier that represents this user.     *     * @see UserInterface     */    public function getUsername(): string    {        return (string) $this->email;    }    /**     * @see UserInterface     */    public function getRoles(): array    {        $roles = $this->roles;        // guarantee every user at least has ROLE_USER        $roles[] = 'ROLE_USER';        return array_unique($roles);    }    public function setRoles(array $roles): self    {        $this->roles = $roles;        return $this;    }    /**     * @see UserInterface     */    public function getPassword(): string    {        return (string) $this->password;    }    public function setPassword(string $password): self    {        $this->password = $password;        return $this;    }    /**     * @see UserInterface     */    public function getSalt()    {        // not needed when using the "bcrypt" algorithm in security.yaml    }    /**     * @see UserInterface     */    public function eraseCredentials()    {        // If you store any temporary, sensitive data on the user, clear it here        // $this->plainPassword = null;    }    public function getFirstname(): ?string    {        return $this->firstname;    }    public function setFirstname(string $firstname): self    {        $this->firstname = $firstname;        return $this;    }    public function getLastname(): ?string    {        return $this->lastname;    }    public function setLastname(string $lastname): self    {        $this->lastname = $lastname;        return $this;    }    public function getProfilePicture(): ?string    {        return $this->profile_picture;    }    public function setProfilePicture(?string $profile_picture): self    {        $this->profile_picture = $profile_picture;        return $this;    }    /**     * @return Collection|Appartment[]     */    public function getOccupiedAppartments(): Collection    {        return $this->occupied_appartments;    }    public function addOccupiedAppartment(Appartment $occupied_appartments): self    {        if (!$this->occupied_appartments->contains($occupied_appartments)) {            $this->occupied_appartments[] = $occupied_appartments;            $occupied_appartments->addCurrentTenant($this);        }        return $this;    }    public function removeOccupiedAppartment(Appartment $occupied_appartments): self    {        if ($this->occupied_appartments->removeElement($occupied_appartments)) {            $occupied_appartments->removeCurrentTenant($this);        }        return $this;    }    /**     * @return Collection|Appartment[]     */    public function getRentedAppartments(): Collection    {        return $this->rented_appartments;    }    public function addRentedAppartment(Appartment $rentedAppartment): self    {        if (!$this->rented_appartments->contains($rentedAppartment)) {            $this->rented_appartments[] = $rentedAppartment;            $rentedAppartment->addLandlord($this);        }        return $this;    }    public function removeRentedAppartment(Appartment $rentedAppartment): self    {        if ($this->rented_appartments->removeElement($rentedAppartment)) {            $rentedAppartment->removeLandlord($this);        }        return $this;    }    /**     * @return Collection|Rental[]     */    public function getTenantRentals(): Collection    {        return $this->tenant_rentals;    }    public function addTenantRental(Rental $tenantRental): self    {        if (!$this->tenant_rentals->contains($tenantRental)) {            $this->tenant_rentals[] = $tenantRental;            $tenantRental->addTenantId($this);        }        return $this;    }    public function removeTenantRental(Rental $tenantRental): self    {        if ($this->tenant_rentals->removeElement($tenantRental)) {            $tenantRental->removeTenantId($this);        }        return $this;    }    /**     * @return Collection|Rental[]     */    public function getLandlordRentals(): Collection    {        return $this->landlord_rentals;    }    public function addLandlordRental(Rental $landlordRental): self    {        if (!$this->landlord_rentals->contains($landlordRental)) {            $this->landlord_rentals[] = $landlordRental;            $landlordRental->addLandlordId($this);        }        return $this;    }    public function removeLandlordRental(Rental $landlordRental): self    {        if ($this->landlord_rentals->removeElement($landlordRental)) {            $landlordRental->removeLandlordId($this);        }        return $this;    }}

I would be grateful if you could help me!Thank's by advance !Tell me if you need more details !

Regards


Viewing all articles
Browse latest Browse all 3655

Trending Articles