Maison > Article > développement back-end > Meilleures pratiques, trucs et astuces Laravel pour 5
À l'approche de 2025, Laravel continue d'être un premier choix pour le développement Web, offrant aux développeurs les outils nécessaires pour créer des applications puissantes et efficaces. Cet article présente les meilleures pratiques, conseils et astuces clés qui peuvent améliorer la qualité de votre code et rationaliser votre flux de travail, que vous utilisiez Laravel 9, 10 ou 11. Ces informations vous aideront à tirer le meilleur parti de Laravel et à améliorer vos compétences en développement. , que vous soyez un développeur débutant ou expérimenté.
Garder Laravel à jour présente plusieurs avantages clés :
L'exécution régulière de composer update est cruciale pour maintenir vos packages à jour. Cette pratique simple est l’un des meilleurs moyens de garantir que vos packages sont à jour avec les dernières fonctionnalités et correctifs de sécurité.
Si vous hésitez sur les mises à jour, cela peut indiquer que votre code n'est pas suffisamment testé. En adoptant des pratiques de test, vous pouvez vous assurer que les mises à jour majeures ne cassent pas votre code, vous permettant ainsi de tirer pleinement parti des améliorations de Laravel.
Si vous préférez ne pas mettre à jour manuellement, pensez à utiliser ServBay, un outil de gestion d'environnement qui a déjà intégré les versions bêta de PHP 8.4, ce qui facilite la mise à jour de Laravel et de divers packages.
Les tests automatisés sont un domaine vaste mais souvent sous-estimé. Cependant, il s'agit de l'une des meilleures pratiques les plus importantes pour garantir la fiabilité du projet.
Les principaux avantages du maintien d'une suite de tests robuste sont les suivants :
Lors de la modification du code, exécutez simplement php artisan test pour identifier toute fonctionnalité cassée, résolvez les problèmes et répétez le processus !
Les tests automatisés peuvent améliorer considérablement la stabilité du projet, stimulant ainsi considérablement votre carrière.
Pour vous aider à démarrer, Laracasts propose des cours de test gratuits. Vous pouvez en apprendre davantage sur PHPUnit (le standard de l'industrie) et Pest (un framework de test moderne qui simplifie les tests PHP). Le cours "Pest From Scratch" est fortement recommandé.
Avez-vous déjà réfléchi aux raisons pour lesquelles vous devriez utiliser un framework comme Laravel ?
Les frameworks offrent une approche structurée du développement, garantissant que tous les membres de l'équipe restent cohérents et travaillent vers un objectif commun. Ils sont dotés de fonctionnalités riches, complexes et éprouvées, vous permettant de vous concentrer sur les aspects uniques de votre projet sans vous enliser dans les détails.
Alors, suivre la structure de projet par défaut de Laravel est-il considéré comme une bonne pratique ? Absolument! Voici pourquoi :
Les demandes de formulaires personnalisés dans Laravel sont des outils puissants pour gérer la validation, offrant plusieurs avantages clés :
Créer une demande de formulaire personnalisé est simple. Exécutez simplement la commande Artisan suivante :
php artisan make:request StorePostRequest
Ensuite, dans votre contrôleur, vous pouvez simplement taper un indice sur la requête :
use App\Http\Requests\StorePostRequest; class PostController { public function store(StorePostRequest $request) { $validated = $request->validated(); Post::create($validated); // Other logic... } }
Les demandes de formulaire personnalisé peuvent également inclure une logique supplémentaire au-delà de la validation. Par exemple, vous pouvez normaliser les données d'entrée avant qu'elles n'atteignent le contrôleur en remplaçant la méthode prepareForValidation :
public function prepareForValidation() { $this->merge([ 'slug' => Str::slug($this->title), ]); }
Dans cet exemple, la méthode génère automatiquement un slug à partir du titre avant le processus de validation.
Les demandes de formulaire personnalisé peuvent également gérer la logique d'autorisation. Si vous trouvez l'utilisation de politiques fastidieuses, vous pouvez inclure de simples vérifications d'autorisation directement dans le formulaire de demande.
Même en suivant les meilleures pratiques, les contrôleurs peuvent devenir lourds. Une excellente solution consiste à utiliser des contrôleurs à action unique dans Laravel. Ces contrôleurs sont conçus pour gérer une seule action, plutôt que plusieurs actions comme les contrôleurs de ressources standard.
Pour créer un contrôleur à action unique, utilisez la commande Artisan suivante :
php artisan make:request StorePostRequest
Cette commande crée un contrôleur avec une seule action, nommée __invoke. Pour plus d'informations sur la méthode magique __invoke, reportez-vous à la documentation Laravel.
Avec un contrôleur à action unique, vous pouvez simplifier les définitions d'itinéraire. Voici comment l'utiliser dans vos itinéraires :
use App\Http\Requests\StorePostRequest; class PostController { public function store(StorePostRequest $request) { $validated = $request->validated(); Post::create($validated); // Other logic... } }
L'utilisation de contrôleurs à action unique est une bonne pratique subjective. C'est à vous et à votre équipe de déterminer si cette approche correspond à la structure et aux préférences de lisibilité du projet.
Dans Laravel, le middleware est un outil puissant qui permet de filtrer ou de modifier les requêtes entrantes. En tirant parti du middleware, vous pouvez éviter la duplication de code et garder les contrôleurs propres et gérables. Voici quelques cas d'utilisation courants du middleware :
Laravel fournit divers middleware intégrés pour les tâches courantes, telles que l'authentification et la limitation de débit.
Pour créer un middleware personnalisé, utilisez la commande Artisan suivante :
public function prepareForValidation() { $this->merge([ 'slug' => Str::slug($this->title), ]); }
Dans votre middleware, vous pouvez définir la logique pour gérer la requête. Voici un exemple de middleware qui vérifie si un utilisateur dispose de suffisamment de jetons :
php artisan make:controller ShowPostController --invokable
Une fois que vous avez défini votre middleware, vous pouvez l'attacher à n'importe quel nombre de routes. Cette approche modulaire permet de garder votre code propre et réduit la duplication dans les contrôleurs.
use App\Http\Controllers\ShowPostController; // Single action controller route Route::get('/posts/{post}', ShowPostController::class);
L'utilisation de politiques d'autorisation dans Laravel est cruciale pour créer des applications claires et maintenables. Les trois principaux avantages de l'utilisation de politiques sont les suivants :
Examinons un scénario pratique d'utilisation d'une politique pour les mises à jour des publications :
php artisan make:request StorePostRequest
Les migrations sont un moyen de définir le schéma de la base de données en utilisant du code PHP pur. Vous pouvez les considérer comme une alternative de code à phpMyAdmin, fournissant un moyen programmatique de gérer la structure de votre base de données. Cette approche est particulièrement bénéfique pour les équipes, car elle permet à chacun de répliquer le même environnement de développement sur ses machines locales et de conserver un historique clair des modifications dans Git.
Les migrations facilitent également le déploiement de projets vers de nouveaux environnements (comme la préparation ou la production) sans avoir besoin d'exporter la base de données depuis d'autres environnements. Cependant, un piège courant est que certains développeurs apportent des modifications directement à la base de données au lieu de créer de nouvelles migrations. Cette pratique peut gêner les autres membres de l'équipe, qui pourraient avoir besoin de demander un vidage de la base de données via Slack. Pour élever le projet et maintenir la cohérence, il est important d'utiliser efficacement les migrations.
Les migrations anonymes sont une solution efficace pour éviter les conflits de noms de classes. Avec cette fonctionnalité, vous pouvez créer plusieurs migrations nommées "update_posts_table" sans rencontrer d'erreurs, réduisant ainsi les frictions pendant le processus de développement.
Dans Laravel 9 et supérieur, lorsque vous exécutez la commande suivante, des migrations anonymes sont générées automatiquement :
use App\Http\Requests\StorePostRequest; class PostController { public function store(StorePostRequest $request) { $validated = $request->validated(); Post::create($validated); // Other logic... } }
La structure de ces migrations ressemble à ceci :
public function prepareForValidation() { $this->merge([ 'slug' => Str::slug($this->title), ]); }
Fait intéressant, vous pouvez également implémenter des migrations anonymes dans Laravel 8. Pour ce faire, remplacez simplement le nom de la classe par return new class et assurez-vous d'inclure un point-virgule à la fin. De cette façon, vous pouvez profiter des avantages des migrations anonymes même dans les versions antérieures.
La méthode down() est utilisée par la commande php artisan migrate:rollback pour annuler les modifications apportées à la base de données. Lorsque certains développeurs choisissent de l’implémenter alors que d’autres ne le font pas, il est important de s’assurer que si vous l’utilisez, votre méthode down() est définie correctement.
Essentiellement, la méthode down() doit inverser les opérations effectuées dans la méthode up(). Voici un exemple simple :
php artisan make:request StorePostRequest
Si vous préférez ne pas utiliser la méthode down(), vous pouvez simplement la supprimer.
Adhérer aux conventions de dénomination des tables de Laravel est une bonne pratique simple qui peut grandement profiter à votre équipe. Lorsque vous utilisez les commandes Artisan, le framework gère automatiquement ces conventions, telles que php artisan make:model Post --migration --factory.
Si, pour une raison quelconque, vous ne pouvez pas utiliser ces commandes, voici un guide rapide :
Pour un modèle nommé Post, la table correspondante doit être nommée posts, au pluriel. Par exemple :
Pour un tableau croisé dynamique reliant Post et Comment (par exemple, comment_post) :
Pour plus de détails, reportez-vous à la documentation officielle.
Il y a d’autres bonnes pratiques à aborder ! Avez-vous rencontré le problème N1 ? Le chargement impatient est un moyen efficace de les prévenir.
Par exemple, si vous affichez une liste de 30 articles et leurs auteurs, en raison d'un chargement paresseux, Eloquent exécutera une requête pour les 30 articles puis 30 requêtes supplémentaires pour chaque auteur (ce qui signifie à chaque fois que vous appelez $post -> user dans votre code, il récupère la relation utilisateur).
La solution est simple : utilisez la méthode with() pour réduire le nombre de requêtes de 31 à 2.
use App\Http\Requests\StorePostRequest; class PostController { public function store(StorePostRequest $request) { $validated = $request->validated(); Post::create($validated); // Other logic... } }
Pour éviter les problèmes N 1, vous pouvez configurer l'application pour qu'elle lève une exception chaque fois qu'une relation est chargée paresseusement. Cette restriction ne doit être appliquée que dans les environnements locaux.
public function prepareForValidation() { $this->merge([ 'slug' => Str::slug($this->title), ]); }
Le mode strict d'Eloquent est un outil de débogage précieux. Il aide les développeurs à identifier les problèmes potentiels pendant le développement en lançant des exceptions dans divers scénarios :
Pour activer le mode strict, ajoutez le code suivant à la méthode boot() de AppServiceProvider.php :
php artisan make:request StorePostRequest
Laravel 9 a introduit une nouvelle façon de déclarer les accesseurs et les mutateurs. Voici comment les mettre en œuvre dès maintenant :
use App\Http\Requests\StorePostRequest; class PostController { public function store(StorePostRequest $request) { $validated = $request->validated(); Post::create($validated); // Other logic... } }
Cette nouvelle syntaxe vous permet de définir les accesseurs et les mutateurs de manière plus concise. Vous pouvez également mettre en cache des valeurs coûteuses en termes de calcul :
public function prepareForValidation() { $this->merge([ 'slug' => Str::slug($this->title), ]); }
En revanche, la méthode précédente ressemblait à ceci :
php artisan make:controller ShowPostController --invokable
Le passage à la nouvelle syntaxe simplifie le code et améliore la lisibilité.
Lorsque vous traitez des tâches chronophages (comme l'envoi d'e-mails après avoir soumis un formulaire de contact), vous pouvez améliorer l'expérience utilisateur en retardant la tâche jusqu'à ce que le serveur réponde à l'utilisateur. C'est là que dispatchAfterResponse() entre en jeu, vous permettant de reporter les processus de longue durée :
use App\Http\Controllers\ShowPostController; // Single action controller route Route::get('/posts/{post}', ShowPostController::class);
Alternativement, si vous préférez planifier des tâches à l'aide d'une fonction anonyme, vous pouvez le faire comme ceci :
php artisan make:middleware CheckTokens
En utilisant dispatchAfterResponse(), vous vous assurez que les utilisateurs reçoivent une réponse plus rapide du serveur tandis que les tâches en arrière-plan n'affectent pas l'expérience utilisateur.
Lors du traitement de tâches gourmandes en calcul (comme la gestion des images téléchargées par les utilisateurs), l'exécution immédiate de ces opérations peut surcharger le serveur et conduire à une mauvaise expérience utilisateur. Voici comment y remédier :
Le système de file d'attente de Laravel vous permet de différer ces tâches de longue durée pour qu'elles s'exécutent de manière parallèle ordonnée ou contrôlée, garantissant ainsi que le serveur reste réactif et que les utilisateurs n'ont pas à attendre.
Pour faciliter la gestion des tâches, pensez à utiliser Laravel Horizon, qui fournit une interface utilisateur pour surveiller et contrôler efficacement les tâches en file d'attente. De cette façon, vous pouvez gérer des processus complexes en arrière-plan tout en conservant des performances fluides.
Lors des tests dans un environnement local, il est préférable d'utiliser une nouvelle base de données à chaque fois que vous exécutez des tests. Laravel fournit un moyen efficace de gérer cela en actualisant paresseusement la base de données avant chaque test. Cela peut être accompli en utilisant le trait RefreshDatabase dans votre classe de test. Cela garantit que la base de données est dans un état propre à chaque fois que des tests sont exécutés, éliminant ainsi les problèmes potentiels causés par les données restantes.
Utilisez le trait RefreshDatabase dans votre classe de test :
php artisan make:request StorePostRequest
Lors de la gestion d’informations sensibles, assurer la sécurité est crucial. Voici quelques bonnes pratiques :
Stockez les informations sensibles (telles que les clés API et les informations d'identification de la base de données) dans le fichier .env plutôt que dans la base de code.
Pour les données nécessitant un cryptage, utilisez les fonctionnalités de cryptage de Laravel :
use App\Http\Requests\StorePostRequest; class PostController { public function store(StorePostRequest $request) { $validated = $request->validated(); Post::create($validated); // Other logic... } }
Assurez-vous de mettre régulièrement à jour les clés d'application (APP_KEY) et de recrypter les données après les mises à jour.
En suivant ces bonnes pratiques, conseils et astuces, vous pouvez améliorer considérablement la qualité et la sécurité de vos applications Laravel. Ces méthodes vous aideront non seulement à écrire du code plus efficace, mais offriront également une meilleure expérience à vos utilisateurs. Continuer à apprendre et à appliquer ces pratiques vous aidera à réussir davantage dans votre développement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!