Apparence
Back-office
Le back-office (back.*, préfixe admin/) est du cœur. On l'étend par les registres et les hooks, on le personnalise par surcharge de vue.
Par où l'étendre
| Je veux… | Point d'extension | Mécanique |
|---|---|---|
| ajouter une entrée de menu | BackMenuRegistry | registres |
| ajouter des routes / un écran d'admin | RouteContributionRegistrar::back() | registres |
| ajouter un onglet / une section à un écran | ViewHookRegistry | hooks |
| valider un champ greffé sur un formulaire | FormRuleRegistry | registres |
| changer l'apparence d'un écran | surcharge vendor/… | surcharger une vue |
| réordonner le menu sans code | config/back_menu.php | — |
Listes (datatables)
Les listings du back-office sont des classes *Datatable (sur stafe/laravel-datatable) : colonnes, recherche, édition en ligne, export. Pour ajouter une colonne ou une action à une datatable existante (sans la forker), utilisez le DatatableExtensionRegistry — voir les registres :
php
$this->app->make(DatatableExtensionRegistry::class)->extend('products', function (Datatable $datatable) {
$datatable->columns()->column('supplier')->label(__('Fournisseur'));
});Onglets & sections d'édition
Chaque écran d'édition expose back.<ressource>.edit.tabs et .sections : un package y greffe un onglet ou une section sans toucher à la vue. Voir les hooks & slots.
Pour valider un champ ainsi greffé, contribuez ses règles via le FormRuleRegistry — extend(SaveProductRequest::class, ['supplier_id' => 'required|exists:…']) depuis votre provider. AppFormRequest les fusionne automatiquement, sans surcharger la Form Request du cœur.
Autorisations
L'accès est gardé par auth + CanAccessBackoffice. Les rôles/permissions (UserRole, Permission) sont des enums ; vous ajoutez vos propres gates via Gate::define(...). Voir Comptes & autorisations.