Les ressources avec Laravel

Renvoyer le résultat d'une API avec classe.

Posté par Alysson le 9 Mars 2020 · 3 minutes de lecture

Depuis que j’ai repris PHP, plus spécifiquement le framework Laravel, il y a un petit truc qui me fait très, très plaisir: les resources.


C’est très orienté débutant, on va voir à l’avenir si la difficulté de ces petits articles augmentent ou s’ils rencontrent un petit succès, j’en ferai probablement davantage.


Le modèle

Puisque j’aime montrer les choses petit à petit, on va commencer par le modèle. Nous n’allons en faire qu’un sans montrer les relations de celui-ci.

Resources's Model

C’est quelque chose de très simple mais là n’est pas le sujet. On a deux types de relations ici: one to many pour les messages et many to one pour l’auteur·e.

Du coup quand on fait une requête pour obtenir tout les threads… ou utilisez la pagination.

Resource's All

Et vu que les relations sont tout autant logiques (dans Laravel) que physiques (en base de données), on peut faire ceci:

Resource's Foreach

Et tada, on a ce qu’il faut pour renvoyer une information et vous montrer comment que c’est beau.

Maintenant, on doit juste renvoyer le résultat. On a deux manière pour procéder, on peut simplement faire un return response()->json(Thread::all());, ce qui n’est pas fameuux, on utiliser une ressource. Voyons voir comment on fait pour renvoyer une telle chose.

On va commencer par faire php artisan make:resource ThreadResource, ensuite on peut aller dans app/Http/resources/ThreadResource.php.

Par défaut, il renvoie simplement le parent. Ce qui veut dire qu’il va tout envoyer tout ce qui est lisible, donc ce qui n’est pas dans les attributs $hidden des modèles… heureusement. Nous allons le modifier un peu pour préciser les choses nous même et avoir plus de contrôle là-dessus.

Resource's resource

L’avantage de cette méthode, c’est qu’on peut choisir quoi envoyer, y compris les relations. Rien n’empêche d’avoir un ThreadResource qui renvoie tout ce qu’il faut pour être totalement exploitable et ThreadLiteResource qui ne renvoie pas les relations; ce qui permet d’éviter la boucle infinie et donc le timeout de PHP.

Et dans la méthode du contrôleur:

Resource's whaa

Quand on veut retourner une seule insance de Thread, il ne faut pas utiliser la méthode statique collection mais créer une instance de ThreadResource.

Resource's unique

Bien sûr, ce n’est pas complet. Mon souhait ici est juste de montrer comment utiliser les Resources de Laravel et faire de beau code; du code maintenable.

Et voilà. Ni plus, ni moins. C’est rapide, simple et efficace. Ça allège beaucoup les contrôleurs: formater le résultat n’est pas leur travail. L’objectif est d’utiliser le principe de Single Responsability de SOLID et de déléguer le code au maximum afin de le rendre lisible et maintenable. 😊

Si tu as une question sur un principe de Laravel ou quelque chose que tu ne comprends pas, hésite pas à me le dire dans les commentaires, je pourrais éclaircir certaines choses. 😉




Psst! Si tu as aimé l'article, n'hésite pas à me laisser un petit commentaire. 🤗