Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Laravel
  3. Packages et helpers
Extrait - Laravel Un framework efficace pour développer vos applications PHP (2e édition)
Extraits du livre
Laravel Un framework efficace pour développer vos applications PHP (2e édition) Revenir à la page d'achat du livre

Packages et helpers

Intégrer un package

1. Introduction

Une des forces de Laravel réside dans ses packages. On peut d’ailleurs considérer Laravel comme étant un assemblage de packages. En effet, lors d’une nouvelle installation de Laravel, de nombreuses bibliothèques développées par d’autres éditeurs ou des particuliers sont installées en même temps. En voici quelques exemples  :

Le système de gestion des fichiers s’appuie sur Flysystem, la bibliothèque d’abstraction développée par The League of Extraordinary Packages, un groupe de développeurs qui créent et maintiennent des bibliothèques de qualité (https://thephpleague.com/).

La gestion de requête et de réponses s’appuie sur HttpFoundation, une couche orientée objet pour la spécification HTTP, créée pour le Framework Symfony (https://github.com/symfony/http-foundation).

Le système de gestion des logs est construit au-dessus de Monolog, un outil développé par Jordi Boggiano et maintenu par de nombreux contributeurs pour envoyer des logs vers des fichiers, des bases de données, des sockets et un grand nombre d’autres services (https://seldaek.github.io/monolog/).

Laravel possède donc des fondations solides, et ajoute simplement la surcouche nécessaire qui permet d’appeler framework cet ensemble de packages. 

Bien qu’offrant de nombreuses fonctionnalités prêtes à l’emploi, une application Laravel a rapidement besoin d’intégrer d’autres packages pour répondre aux besoins métier. Tout au long de cet ouvrage, divers packages ont d’ailleurs été installés pour ajouter des fonctionnalités  : Guzzle, par exemple, pour émettre des requêtes HTTP vers l’extérieur, ou encore Predis pour utiliser une connexion vers un serveur Redis.

L’intégralité des dépendances est présente sous la forme de fichiers dans le dossier vendor de l’application. En parcourant ce dossier, on peut en apprendre davantage sur le fonctionnement de Laravel et son interaction avec ses packages. 

2. Choisir un package

Avant d’installer un package, il est important d’essayer d’évaluer sa qualité....

Package utiles et de qualité

Une sélection de packages pouvant être utiles est présentée ci-dessous. J’en utilise une partie dans mes projets professionnels. Certains sont spécifiques à Laravel, d’autres sont utilisables dans n’importe quelle application PHP. On ne rappellera pas ici ceux qui sont directement intégrés à Laravel et qu’il n’y a donc pas besoin d’installer.

  • Laravel Debugbar (https://github.com/barryvdh/laravel-debugbar)  : presque unanimement considérée comme incontournable, la barre de débogage de Barry vd. Heuvel est un outil permettant de comprendre le fonctionnement d’une application Laravel, la pile d’appels, les vues, les requêtes de base de données, etc. C’est une bibliothèque qui aide à comprendre le cycle de fonctionnement de l’application et à résoudre les problèmes dans les phases de développement.

  • Laravel IDE helper (https://github.com/barryvdh/laravel-ide-helper)  : à destination des utilisateurs de l’environnement de développement intégré PHPStorm, ce package permet de faire fonctionner l’autocomplétion sur toutes les classes.

  • Laravel Excel (https://github.com/Maatwebsite/Laravel-Excel)  : ce package permet de manipuler des fichiers Excel et CSV en lecture et écriture....

Helper pour les chaînes de caractères

Laravel offre de nombreuses fonctions pour manipuler les chaînes de caractères. L’un des avantages des fonctions Laravel par rapport à celles fournies nativement par PHP est que ces fonctions sont directement pensées pour gérer l’UTF-8, ce qui n’est historiquement pas le cas avec PHP. En coulisses, elles utilisent les fonctions de type mb_* au travers de la classe Illuminate\Support\Str fournie dans le Framework.

1. Transformer des chaînes

a. Casse  : Snake, Kebabs et Camel

La fonction Str::snake permet de transformer la casse d’une chaîne de caractères en Snake Case (c’est-à-dire chaque mot séparé par un tiret bas), par exemple pour créer un nom de table dans la base de données à partir d’un nom de classe.

Fonction Str::snake

echo Str::snake('BonjourToutLeMonde'); 
// Affiche  : bonjour_tout_le_monde  

La fonction Str::kebab_case permet de transformer la casse d’une chaîne de caractères en Kebab Case, avec des tirets entre chaque mot, à la manière d’une brochette.

Fonction Str:: kebab

echo Str::kebab('BonjourToutLeMonde'); 
// Affiche  : bonjour-tout-le-monde  

La fonction Str::camel permet de transformer la casse d’une chaîne de caractères en Camel Case, ce qui revient à mettre une majuscule entre tous les mots sauf sur le premier, comme pour un nom de méthode en PHP.

Fonction Str:: camel

echo Str::camel('bonjour-tout-le-monde'); 
// Affiche  : bonjourToutLeMonde  

La fonction Str::studly...

Helper pour les tableaux

Réaliser des opérations sur les tableaux fait partie du quotidien des développeurs PHP. On manipule des listes d’entités pour les enrichir, pour les modifier, pour en extraire des portions ou encore pour les afficher. Le langage PHP propose déjà de nombreuses fonctions pour manipuler les tableaux (https://www.php.net/manual/fr/ref.array.php). Laravel y ajoute quelques fonctions pratiques. Plusieurs exemples sont présentés ci-dessous.

1. Récupérer des éléments

La fonction Arr::first récupère uniquement le premier élément d’un tableau passé en premier paramètre, qui remplit la condition décrite dans une fonction de rappel passée en deuxième paramètre, comme dans l’exemple suivant.

Fonction Arr::first

$array = [1, 2, 3, 4]; 
 
echo Arr::first($array, function (int $value, int $key) { 
 
    return $value > 2; 
 
}); 
 
// Affiche  : 3  

La fonction Arr::last fonctionne à l’inverse et retournera la dernière occurrence qui remplit la condition.

Fonction Arr::last

$array = [1, 2, 3, 4]; 
 
echo Arr::last($array, function (int $value, int $key) { 
 
    return $value > 2; 
 
}); 
 
// Affiche  :...

Autres helpers

1. Chemins et dossiers

Il est possible d’obtenir le chemin complet vers les différents dossiers d’une application Laravel grâce aux fonctions assistantes *_path.

Fonctions *_path

echo base_path(); 
// Chemin complet vers la racine de l'application 
 
echo app_path(); 
// Chemin complet vers le dossier « app  » de l'application 
 
echo database_path(); 
// Chemin complet vers le dossier « database  » de l'application 
 
echo config_path(); 
// Chemin complet vers le dossier « config  » de l'application 
 
echo resource_path(); 
// Chemin complet vers le dossier « resources  » de l'application 
 
echo public_path(); 
// Chemin complet vers le dossier « public  » de l'application 
 
echo storage_path(); 
// Chemin complet vers le dossier « storage  » de l'application  

Ces fonctions sont souvent plus pratiques que d’utiliser des chemins relatifs comme « ../../  », qui sont amenés à varier en fonction de l’évolution de l’application.

2. URL

La fonction url permet de créer une URL complète à partir d’une chaîne de caractères....

Les collections

1. Introduction

Les collections sont une composante puissante de Laravel  : certains les qualifient de tableaux avec des super-pouvoirs. Autrement dit, une collection est une instance de classe représentant une liste d’éléments qui possède de nombreuses méthodes pour la manipuler.

Les collections ont déjà été utilisées à plusieurs reprises dans cet ouvrage. En effet, chaque fois qu’on récupère des éléments de la base de données avec Eloquent, il s’agit en réalité d’une collection enrichie, ce qui a permis d’utiliser de nombreuses méthodes sur ces éléments.

Utiliser des collections permet par certains aspects de se rapprocher de la programmation fonctionnelle, telle qu’elle est parfois décrite de manière réductrice en JavaScript par exemple, en ajoutant des méthodes map, reduce et filter sur des listes d’éléments.

2. Transformer un tableau en collection

La première étape pour commencer à utiliser les collections est de transformer un tableau en collection. Pour cela, Laravel met à disposition la fonction assistante collect, qui prend en paramètre un tableau (ou une collection) et le transforme en collection. Il est possible de faire appel à cette fonction n’importe où dans une application.

Créer une collection

$collection = collect([1, 2, 3]);  

Une fois la collection créée, il est possible de la manipuler comme dans l’exemple suivant.

Inverser l’ordre des éléments puis prendre le premier

$collection = collect([1, 2, 3]); 
 
echo $collection->reverse()->first(); 
 
// Affiche  : 3  

Dans cet exemple...

Tinker

Tinker (littéralement « bricoleur  ») est un outil en ligne de commande permettant de tester rapidement du code dans son contexte. Il permet en effet d’utiliser les classes et l’environnement d’une application Laravel, les files d’attente, les envois d’e-mails, etc. On peut comparer cet outil avec un PHP CLI spécialement adapté pour Laravel.

Tinker s’appuie sur PsySH (https://github.com/bobthecow/psysh), un REPL (Read-Eval-Print-Loop) pour PHP.

Tinker permet donc de tester des portions de code, sans avoir à polluer temporairement les fichiers de l’application. Il est parfois tentant d’ajouter une route pour tester un appel d’une classe ou d’une petite routine puis de l’effacer juste après. C’est dans ce genre de situation que Tinker s’avère utile, permettant de tester des bouts de code avant de les intégrer réellement à l’application, sans altérer les fichiers. Loin d’être indispensable, cet outil peut s’avérer précieux dans les phases de conception ou de débogage.

Pour lancer Tinker, utilisez la commande Artisan tinker.

Lancer Tinker

sail artisan tinker  

Ensuite, utilisez les commandes que vous souhaitez depuis le terminal et Tinker affichera le résultat.

Interface de Tinker

Psy Shell v0.11.19 (PHP 8.2.6 — cli) by Justin Hileman ...