Skip to content

Étendre Slab — vue d'ensemble

Slab est conçu pour être étendu sans être modifié. Plutôt que d'apprendre des dizaines de cas particuliers, vous apprenez une poignée de mécaniques génériques — et vous les retrouvez partout.

Le principe : un seul sens de dépendance

Le cœur (slab/framework) n'expose que des contrats. Les features les implémentent, le frontend les consomme. Personne ne dépend de personne d'autre que du cœur :

Vous étendez Slab depuis l'extérieur : un package / plugin quand le comportement est réutilisable et reproductible sur plusieurs projets, la couche applicative du skeleton pour le sur-mesure d'une seule appli. Dans les deux cas, le cœur reste une dépendance Composer mise à jour normalement — jamais forkée. Tout point du cœur est conçu pour être substitué par ce biais, sans cul-de-sac.

Les mécaniques

Tout l'art d'étendre Slab tient dans sept mécaniques. Chacune a sa page, avec le même fil : le problème → le principe → un exemple → où Slab l'utilise → comment l'employer.

MécaniqueEn une phrasePour…
Le conteneur & les contratsRemplacer ou décorer n'importe quelle implémentation par défautchanger un comportement du cœur
Les pipelinesTransformer une valeur via une chaîne de maillonsle prix, les totaux
Les registresContribuer un élément à une liste agrégée par le cœurmenu, routes, étapes, options
Les résolveurs de contexteRemplacer une décision « quel est le X courant »panier, devise, zone, taxe
Les hooks & slots de vueGreffer du contenu dans une vue existanteonglets BO, slots front
Modèles & relationsGreffer des relations, étendre un modèle du cœurrelier vos données au domaine
Les événementsRéagir à ce qui se passe dans le domainee-mail, indexation, intégrations

« Je veux… » → quelle mécanique

Je veux…Mécanique
changer le calcul d'un prix, ajouter une remisepipeline
ajouter une ligne aux totaux (livraison, éco-part…)pipeline
ajouter une entrée au menu du back-officeregistre (BackMenuRegistry)
ajouter des routes (back ou front)registre (RouteContributionRegistrar)
ajouter un mode de livraison / paiement au checkoutregistre (CheckoutOptionProvider)
changer la devise ou la zone fiscale couranterésolveur
remplacer un service du cœurconteneur
ajouter un onglet à la fiche produithook de vue
relier mes tables aux modèles du cœurrelations
envoyer un e-mail à la commandeévénement (OrderPlaced)
changer l'apparence d'une pagesurcharger une vue

Ce qui est extensible aujourd'hui

La surface complète et à jour est dans la référence des points d'extension (extraite du code). En bref :

DomaineÉtat
Prix & totaux (pipelines)✅ ouvert
Résolveurs de contexte (panier, devise, zone, taxe)✅ ouvert
Checkout (étapes, options, flow)✅ ouvert
Menu & routes back/front✅ ouvert
Relations sur les modèles✅ ouvert (ajout)
Événements de domaine✅ ouvert
Vues (cascade) & traductions✅ ouvert
Hooks de vue (onglets/sections)✅ ouvert (tous les écrans d'édition)
Services internes (derrière contrats)✅ ouvert
Orchestrateurs (placement de commande, pricing, totaux)✅ substituables (contrat + binding)
Gardes du back-office (groupe de middleware back)✅ ouvert
Substitution de classe de modèle⚪ par choix de conception — la morph map couvre le besoin

Le fil rouge

Toutes ces mécaniques s'activent au même endroit : le boot() du service provider d'un package ou de votre application. Voir Créer un package pour le squelette.