Apparence
Créer un thème
Dans Slab, tout le front est un package : slab/frontend fournit les contrôleurs, les routes front.*, les vues, les view-models, les assets et le tunnel de commande. Le cœur n'expose, lui, que le domaine et un contrat de noms que le front doit honorer. Personnaliser la présentation se fait à deux niveaux.
Niveau 1 — surcharger des vues (le cas courant)
Le frontend charge ses vues sous le namespace frontend::. Grâce à la cascade Laravel, votre application a la priorité : déposez une vue de même chemin sous resources/views/vendor/frontend/ pour la remplacer.
resources/views/vendor/frontend/
├── layouts/front.blade.php ← remplace le layout
├── products/show.blade.php ← remplace la fiche produit
└── components/front/header.blade.phpAucune configuration : la vue de l'app l'emporte. Vous ne touchez jamais au code du frontend, et vous gardez ses mises à jour pour tout ce que vous ne surchargez pas. Détail : Surcharger une vue.
Niveau 2 — un thème de remplacement complet
Le front étant un package remplaçable, vous pouvez écrire votre propre front à la place de slab/frontend — utile pour une refonte totale. Un thème complet est un package qui, dans son provider :
- charge ses vues sous un namespace stable ;
- enregistre ses view-models via
Blade::component(MyComponent::class, 'front.cart'); - déclare ses routes front (montées dans
booted(), enveloppées du middlewareweb) ; - fournit ses assets (SCSS/JS) ;
- honore les deux contrats du cœur (ci-dessous).
Les contrats à honorer
Un thème complet doit fournir tous les noms de routes garantis et exposer tous les slots — c'est ce qui permet aux packages de fonctionner quel que soit le front :
php
use Slab\Framework\Core\Routing\FrontRouteContract;
use Slab\Framework\Core\View\FrontSlotContract;
FrontRouteContract::names(); // ['front.home', 'front.products.show', 'front.checkout.user.show', …]
FrontSlotContract::names(); // ['front.head', 'front.body.start', 'front.body.end', 'front.checkout.summary']Exposez les slots avec <x-hook> dans vos layouts ; les packages les remplissent via le ViewHookRegistry.
Le tunnel de commande
Le tunnel d'étapes appartient au front, pas au cœur. Réutilisez le DefaultCheckoutFlow du frontend ou fournissez le vôtre (contrat CheckoutFlow). Les features (transport, paiement) n'exposent que des options en donnée (CheckoutOptionProvider) que le thème rend génériquement — voir Commande & checkout.
Quel niveau choisir ?
| Besoin | Approche |
|---|---|
| Changer le style, quelques vues | Niveau 1 : surcharge sous vendor/frontend/ |
| Refondre la présentation sans changer le métier | Niveau 1, large |
| Remplacer entièrement le front (autre rendu, headless…) | Niveau 2 : votre package de thème |
Dans tous les cas, le domaine reste intact : un thème ne touche jamais au cœur ni aux features.