7. Récupérer une liste de ressources

 Pour que notre API soit bien organisée, on va créer un contrôleur par ressource. Chaque contrôleur contiendra les actions associées à une ressource.

 

Créons notre PhoneController

Lancez la commande : 

./bin/console make:controller

Appellez ce contrôleur : PhoneController. Voici le fichier généré : 

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;

class PhoneController extends AbstractController
{
    /**
     * @Route("/phone", name="phone")
     */
    public function index()
    {
        return $this->render('phone/index.html.twig', [
            'controller_name' => 'PhoneController',
        ]);
    }
}

On va modifier effectuer quelques modifications dans ce fichier :

- le contrôleur va pointer à l'URI /api/phones

- notre méthode index va pointer à la racine, en méthode GET

- cette méthode va renvoyer notre liste de téléphones au format JSON.

Voici le résultat : 

<?php

namespace App\Controller;

use App\Repository\PhoneRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Serializer\SerializerInterface;

/**
 * @Route("/api/phones")
 */
class PhoneController extends AbstractController
{
    /**
     * @Route("/", name="list_phone", methods={"GET"})
     */
    public function index(PhoneRepository $phoneRepository, SerializerInterface $serializer)
    {
        $phones = $phoneRepository->findAll();
        $data = $serializer->serialize($phones, 'json');

        return new Response($data, 200, [
            'Content-Type' => 'application/json'
        ]);
    }
}

Allez voir le rendu sur Postman à l'adresse http://localhost:8000/api/phones :


 

On récupère bien notre liste de téléphones. Seulement, si on a 100, 1000, ou encore plus de téléphones, notre réponse risque d'être de plus en plus longue. 

Mettons en place une pagination 😏