Vue d’ensemble
Cette section couvre l’implémentation interne de Laravel que la documentation officielle seule ne suffit pas à saisir, ainsi que des sujets avancés spécifiques au développement de packages. En parcourant le code source, elle présente des patterns de conception concrets et des méthodes d’extension.Développement de packages
Développement de packages Laravel
Des fondations du développement de packages autour du service provider jusqu’à la publication de configurations, vues et migrations.
Tester des packages Laravel avec Orchestra Testbench
Construisez un environnement de test avec Orchestra Testbench et validez service providers, façades et base de données.
Développer un package avec Testbench Workbench
Créez un environnement de vérification proche d’une vraie application, avec routes, migrations et services démarrés.
Gestion de la compatibilité de versions de package
Stratégie de maintenance de package face aux montées de version de Laravel et PHP, et matrices de test GitHub Actions.
GeneratorCommand — implémenter des commandes make: personnalisées
Découvrez comment implémenter des commandes
make: propres à votre package en héritant de GeneratorCommand.Fusion et cache de la configuration des packages
Comprenez la différence entre fusion superficielle et remplacement récursif, et maintenez la configuration en tenant compte des fichiers publiés et du cache de configuration.
Publier et mettre à jour les migrations d'un package
La différence entre publication et chargement direct, les risques liés au changement d’horodatage et à la republication, et les changements de schéma pour les utilisateurs existants.
Surcharger et mettre à jour les vues d'un package
L’ordre de recherche des vues, la compatibilité des templates publiés et une procédure de mise à jour qui tient compte du cache Blade.
Enregistrement et cache des routes d'un package
La séparation des middlewares et des noms, et le lien entre les changements de configuration et la recréation du cache des routes.
Cache d'un package et intégration à optimize
Découvrez les clés d’enregistrement des tâches personnalisées, les exclusions, l’ordre d’exécution et la gestion des échecs.
Assets publics d'un package et mises à jour
Découvrez la distribution de JavaScript et de CSS, la portée de sélection des tags, l’écrasement et la republication lors des mises à jour Composer.
Surcharge et mise à jour des traductions d'un package
Découvrez la surcharge partielle des traductions PHP, les clés partagées des traductions JSON et comment mettre à jour sans casser les traductions publiées.
Hooks de résolution des services d'un package
Découvrez la configuration différée avec callAfterResolving(), son application aux services déjà résolus et les précautions liées à l’idempotence.
Enregistrement et mise en cache des écouteurs d'événements d'un package
Découvrez la différence entre enregistrement explicite et découverte automatique, comment éviter le double enregistrement, ainsi que la portée de event:cache et sa vérification lors des mises à jour.
Conception du cycle de vie des services d'un package
Découvrez l’implémentation interne de scoped, les dépendances conservées par les singletons et l’isolation de l’état dans les workers de longue durée.
Extensions Blade d'un package et cache de compilation
Découvrez le moment d’exécution des directives et conditions personnalisées, ainsi que la gestion du cache lors des mises à jour.
Intérieur du framework
Structure d'application depuis Laravel 11
Vision d’ensemble du Slim Application Skeleton et implémentation interne, de Application::configure() à ApplicationBuilder.
Trait Macroable
Fonctionnement et patterns d’utilisation du trait Macroable pour ajouter des méthodes personnalisées aux classes Laravel existantes.
Trait Conditionable
Implémentation interne des méthodes when()/unless() et patterns pour concevoir des API fluides.
Illuminate\Support\Manager — anatomie du système de drivers
La classe cœur du système de drivers hérité de Laravel 4.0. De l’enregistrement d’un driver personnalisé au MultipleInstanceManager.
Pattern Pipeline
Fonctionnement de la classe Illuminate\Pipeline\Pipeline et pattern pour chaîner plusieurs étapes de traitement.
Trait InteractsWithData
Conception d’un trait pour doter vos propres classes d’une API d’accès aux données lors du développement d’un package.
Helper tap() et trait Tappable
Utilisation et patterns d’implémentation du helper tap() et du trait Tappable de Laravel.
Attributs PHP
Comment utiliser les attributs PHP introduits et renforcés dans Laravel 13 pour déclarer la configuration des jobs et modèles.
Implémentation interne du helper once()
Fonctionnement du cache basé sur WeakMap dans les classes Once et Onceable, et application dans PreventsCircularRecursion d’Eloquent.
Eloquent en profondeur
Casts personnalisés d'Eloquent
Casts personnalisés implémentant l’interface CastsAttributes. Pattern Value Object, casts entrants et Castables.
Observers Eloquent et événements de modèle
Mécanisme des événements déclenchés par les modèles Eloquent et gestion centralisée via des classes Observer.
Scopes Eloquent
Fonctionnement des scopes locaux et globaux. De l’implémentation interne de SoftDeletingScope aux cas d’usage pratiques.
Collection Deep Dive
Décryptage de l’implémentation des Collections Laravel : histoire, structure de classes, PHPDoc Generics et méthode de lecture.
Messages d'ordre supérieur des collections
Fonctionnement et usage pratique des messages d’ordre supérieur (Higher-order Messages) des collections.
MCP et IA
Créer un serveur MCP avec Laravel
Construire un serveur MCP prêt pour la production avec le package laravel/mcp. De l’implémentation d’outils, ressources et prompts jusqu’à l’authentification.
Créer un provider personnalisé pour l'AI SDK
Décryptage du code source de Laravel AI SDK et implémentation d’un provider personnalisé pour un service IA non pris en charge nativement.
Créer un agent personnalisé Boost
Plongée dans l’architecture d’extension de Laravel Boost et création d’un agent personnalisé.
Authentification, validation et autres
Implémenter un guard d'authentification personnalisé
Comment créer un guard d’authentification personnalisé en implémentant les interfaces Guard et StatefulGuard, expliqué au niveau du code source.
Règles de validation personnalisées
Comment étendre la validation avec des objets de règle ou des closures, jusqu’à leur implémentation interne.
Personnalisation de la limitation de débit
Plongée dans la façade RateLimiter et implémentation de limitations personnalisées par utilisateur, plan ou adresse IP.
Tests avancés avec Pest
Utilisation avancée de Pest : Expectation API, datasets, fakes et Mockery, présentée de façon structurée.