Widgets
Un Widget és una targeta d'estadística al dashboard del panell: un valor, calculat en viu a cada petició, amb color, icona i descripció opcionals. Es registren al Panel, no a un Resource:
php
$panels->register(
Panel::make('admin')
->widgets([
Widget::make('total_posts')
->label('Total Posts')
->value(fn (): int => Post::count())
->description('All time')
->icon('document-text'),
Widget::make('published_posts')
->label('Published Posts')
->value(fn (): int => Post::where('is_published', true)->count())
->color('success'),
])
);API
| Mètode | Descripció |
|---|---|
make(string $name) | Identificador intern del widget. |
label(string|Closure $label) | Títol de la targeta. Per defecte, Str::headline($name). Una closure permet traduir-lo. |
value(Closure $callback) | Calcula el valor mostrat. S'executa a cada petició del dashboard, i no hi ha caché per defecte. |
color(string|Closure $color) | Color de la targeta. Com a closure, rep el valor ja calculat (fn (mixed $value) => ...). |
description(string|Closure $description) | Text secundari sota el valor. Mateixa regla que color() quan és una closure. |
icon(string $icon) | Vegeu la llista d'icones disponibles a Accions. |
visible(Closure $callback) | Si retorna fals, el widget no es mostra. S'avalua a cada petició. |
color() i description() accepten un valor fix o una closure que depèn del propi valor del widget, útil per canviar el color segons si la xifra és bona o dolenta sense duplicar la lògica de value().
Els widgets d'un Panel apareixen tots junts al dashboard. Els que tenen visible() es filtren per usuari, i com que el closure s'avalua a cada petició, pot dependre de l'usuari autenticat:
php
Widget::make('my_pending')
->label('My pending tasks')
->value(fn (): int => auth()->user()->tasks()->pending()->count())
->visible(fn (): bool => auth()->user()->can('tasks.view'))Un widget amb visible() fals tampoc s'inclou a la resposta de l'API del dashboard.