Apparence
Ajouter un écran de back-office
Vous voulez un écran d'administration sur-mesure pour votre projet — un tableau de rapports, un réglage maison — directement dans le skeleton, sans créer de package. C'est le même mécanisme que pour un package (les registres), invoqué depuis un provider de votre application.
1. Un provider d'application
Le skeleton n'enregistre aucun provider par défaut (bootstrap/providers.php est vide). Créez-en un — make:provider l'ajoute automatiquement à bootstrap/providers.php :
sh
php artisan make:provider BackofficeServiceProvider2. Contribuer la route et l'entrée de menu
Dans le boot() du provider, exactement comme le ferait un package :
php
namespace App\Providers;
use App\Http\Controllers\Back\ReportsController;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\ServiceProvider;
use Slab\Framework\Core\BackMenu\Contracts\BackMenuRegistry;
use Slab\Framework\Core\Routing\Contracts\RouteContributionRegistrar;
class BackofficeServiceProvider extends ServiceProvider
{
public function boot(): void
{
// La route rejoint le groupe back-office : préfixe `admin/`, nom `back.*`,
// groupe de middleware `back` (= `auth` + `CanAccessBackoffice`). (→ back.reports.index)
$this->app->make(RouteContributionRegistrar::class)->back(function () {
Route::get('reports', [ReportsController::class, 'index'])->name('reports.index');
});
// L'entrée de menu (sans `parent:` = section racine).
$this->app->make(BackMenuRegistry::class)->add(
'reports', __('Rapports'),
route: 'back.reports.index', icon: 'bar_chart', priority: 60,
);
}
}3. Le contrôleur
Dans app/Http/Controllers/Back/, en étendant le BackController du cœur :
php
namespace App\Http\Controllers\Back;
use Illuminate\Contracts\View\View;
use Slab\Framework\Http\Controllers\Back\BackController;
class ReportsController extends BackController
{
public function index(): View
{
return view('back.reports.index');
}
}4. La vue
Dans resources/views/back/reports/index.blade.php, en réutilisant le layout du back-office :
blade
<x-layout.back>
<x-slot:header>
<h1>{{ __('Rapports') }}</h1>
</x-slot:header>
<x-back.section>
{{-- votre contenu --}}
</x-back.section>
</x-layout.back>5. L'icône du menu
Le menu utilise une police d'icônes générée. Si votre icône (bar_chart) n'y est pas encore, ajoutez-la à vite/admin-icons.json puis régénérez :
sh
npm run build # régénère la police d'icônes + les assetsLes icônes référencées en PHP (comme
icon: 'bar_chart'du menu) ne sont pas détectées par le scan des templates : il faut les lister dansvite/admin-icons.json.
Et voilà
Visitez /admin/reports : l'entrée apparaît dans le menu, la page se rend dans le layout du back-office. Vous avez ajouté un écran sans toucher au cœur.
Quand en faire un package ?
Si cet écran doit être réutilisé sur plusieurs projets, déplacez ce même code dans un package : le boot() est identique, seul l'emballage change.