メインコンテンツへスキップ

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 des commandes Artisan d'un package et résolution des dépendances

Explique la différence entre enregistrement, instanciation et exécution, et l’isolation des effets de bord par l’injection de dépendances dans handle().

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.

Enregistrement et portée des middlewares d'un package

Explique la séparation entre enregistrement d’alias et application, comment éviter d’écraser les groupes et la vérification avec le cache.

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.

Enregistrer des drivers Storage dans un package et les résoudre à nouveau

Explique l’enregistrement de la logique de création, la conservation et la nouvelle résolution des disques, et les vérifications nécessaires en plus de fake.

Canaux de notification personnalisés dans un package et vérification de l'envoi

Explique la résolution des canaux par nom de classe, le routage des destinataires, le traitement en file d’attente et les tests d’envoi réel.

Tags de conteneur et agrégation de plugins d'un package

Découvrez la résolution paresseuse de tagged(), la conversion en tableau de giveTagged(), ainsi que les points d’attention liés aux enregistrements en double et au cycle de vie.

Client HTTP et tests dans un package

Découvrez l’utilisation de la Factory partagée, l’isolation de l’état par requête et la vérification des requêtes et des exceptions avec fake.

Étendre et résoudre à nouveau les canaux de log d'un package

Découvrez custom et via, l’enregistrement d’un driver personnalisé, et une vérification qui tient compte des canaux conservés et du repli.

Stores de cache personnalisés et contrats pour les packages

Découvrez le moment d’enregistrement, la répartition des rôles entre Store et Repository, la conversion du TTL et la prise en charge des verrous.

Enregistrer et tester des transports de mail dans un package

Découvrez la séparation entre nom de Mailer et nom de Transport, la nouvelle résolution après un changement de configuration et les chemins d’envoi que le fake ne permet pas de vérifier.

Attributs contextuels et résolution des dépendances dans un package

Explique l’injection de configuration par des attributs personnalisés, l’ordre de résolution, la différence entre make et call, et la durée de vie des services déjà créés.

Enregistrement et maintenance des tâches planifiées d'un package

Explique l’activation explicite, l’enregistrement après la résolution du Schedule, le double enregistrement et les noms de verrou, et la vérification lors d’un changement de configuration.

Drivers de session personnalisés pour les packages

Explique le contrat de stockage du handler, la sélection explicite, le TTL et le format de stockage, ainsi que la conservation et la vérification des Stores déjà créés.

Extension des connexions de base de données pour les packages

Explique l’extension par nom de connexion et par nom de driver, l’ordre de création, ainsi que la conservation et la recréation des connexions.

Enregistrement de relations dynamiques pour les packages

Ajoutez des relations sans modifier les modèles et vérifiez les clés explicites, les collisions de noms, l’héritage et la durée de vie de l’état d’enregistrement.

Enregistrement de règles de validation sous forme de chaîne pour les packages

Explique l’enregistrement auprès de la Factory, les messages et traductions, la différence entre règles Implicit et Dependent, et la durée de vie des Validators déjà créés.

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.

afterQuery d'Eloquent et le contrat des résultats

Traitement des résultats dans les scopes locaux et différences de types, de nombre d’appels et de détection de page selon la méthode de récupération.

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é.

Les middlewares d'agent de Laravel AI SDK

Ordre d’exécution à chaque étape, traitement après la réponse du modèle et arrêt selon les tokens cumulés.

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.
最終更新日 2026年11月7日