Introduction
Laravel Essentials, conçu par Nuno Maduro, est un package qui transforme en profondeur la configuration par défaut des applications Laravel. Il propose des comportements plus fiables, une sécurité renforcée, et une expérience de développement plus cohérente. Ce guide présente ses principales fonctionnalités, leurs apports, ainsi que leurs limites potentielles.
Un socle plus solide dès l’installation
Essentials s’installe simplement via Composer :
composer require nunomaduro/essentials
php artisan vendor:publish --tag=essentials-stubs
Dés l’intégration, plusieurs améliorations se mettent en place, notamment sur les modèles Eloquent. Les modèles deviennent “stricts” : les attributs non définis déclenchent des erreurs, et les assignations massives non autorisées sont bloquées. Cette posture favorise une discipline rigoureuse dans la gestion des données.
Les relations définies dans $with sont automatiquement chargées à la création d’un modèle, éliminant ainsi les problèmes attachés au lazy loading et réduisant le nombre de requêtes inattendues.
Dates, sécurité et réseau : durcissement global
Essentials remplace les dates Carbon par CarbonImmutable, garantissant des objets date immuables. Ce changement évite les effets de bord liés aux manipulations involontaires des dates.
En production, il impose l’usage du protocole HTTPS sur toutes les URLs générées, assurant une communication sécurisée, évitant ainsi les oublis fréquents de HTTPS dans les environnements mixtes.
Par ailleurs, certaines commandes Artisan potentiellement destructrices (comme migrate:fresh) sont bloquées en production, ajoutant une couche de protection supplémentaire.
De manière complémentaire, Essentials durcit les appels HTTP, simule le comportement de la fonction sleep() via un fake, et configure Vite pour précharger les assets, optimisant le rendu côté client.
Outils de développement améliorés
Essentials fournit également des commandes Artisan supplémentaires comme make:action, ainsi que des presets pour Pint et Rector (essentials:pint, essentials:rector) afin de standardiser la qualité du code.
Bien que toutes ces options soient configurables via config/essentials.php, Nuno Maduro recommande son usage principalement sur de nouveaux projets ou lorsque l’on maîtrise bien Laravel, car le package modifie en profondeur certains comportements par défaut.
Innovations apportées
Essentials apporte une série d’améliorations notables : la rigueur des modèles stricts, la gestion immuable des dates, la préservation d’un bon usage de HTTPS, et la sécurisation des environnements productifs. Cela permet d’installer un cadre de travail solide et sécurisé dès les premières étapes d’un projet Laravel, sans effort supplémentaire de configuration.
Limites et précautions
Parmi les limites, il faut noter que modifier la gestion des modèles et des dates peut casser des morceaux de code legacy ou des comportements implicites, notamment :
- Si un projet existant utilise mass assignment de façon générique, les protections d’Essentials peuvent interrompre des processus.
- Utiliser CarbonImmutable en remplacement de Carbon peut créer des incompatibilités avec des bibliothèques tierces utilisant des dates mutables.
- Les protections en production exigent une bonne compréhension de son environnement, sinon des fonctionnalités légitimes peuvent être bloquées.
Exemple d’adoption
Sur un projet Laravel neuf, un développeur pourrait, après installation, configurer la date immuable et tester immédiatement :
$model = new App\Models\Post();
$model->published_at->addDay(); // Avec CarbonMutable, cela modifie l’objet. Ici, un nouvel objet est créé.
De même, définir une relation systématiquement chargée :
class Post extends Model
{
protected $with = ['author', 'comments'];
}
et ensuite constater que les données liées sont toujours récupérées sans requête supplémentaire.
Conclusion
Laravel Essentials propose un cadre de travail durci, cohérent et sécurisé, idéal pour les nouveaux projets où l’on souhaite installer dès le départ de bonnes pratiques en termes de modèles, dates, sécurité et qualité de code. Malgré un impact potentiellement disruptif sur les applications existantes, ce package est un excellent moyen de démarrer un projet Laravel synthétique, robuste et prêt pour la production.
Sources
- Yannick Lyon Fatt - Better defaults for your Laravel applications with Essentials