Версія v1.6.5 Попередні версії: документація на GitHub
Дашборди
На цій сторінці
Дашборд це сторінка з картками метрик. Перший дашборд, який може бачити
користувач, відкривається на головній сторінці панелі (/admin). Решта мають власні адреси
/admin/dashboards/{uriKey} і пункти в бічному меню.
Генератор
php artisan larsadmin:dashboard Content
Клас створюється як App\Larsadmin\Dashboards\Content. --force перезаписує існуючий клас.
Класи дашбордів у app/Larsadmin не реєструються як Entity, і автоматично вони теж не
підключаються: дашборд треба додати в dashboards() (див. нижче).
Клас дашборда
namespace App\Larsadmin\Dashboards;
use App\Larsadmin\Metrics\NewPosts;
use App\Larsadmin\Metrics\PostsByStatus;
use App\Larsadmin\Metrics\PostsPerDay;
use Illuminate\Http\Request;
use Maxcxam\Larsadmin\Dashboards\Dashboard;
class Content extends Dashboard
{
public function name(): string
{
return 'Аналітика контенту';
}
public function cards(Request $request): array
{
return [
NewPosts::make()->help('Дописи, створені за період.'),
PostsByStatus::make(),
PostsPerDay::make()->width('full'),
];
}
}
| Член класу | За замовчуванням | Опис |
|---|---|---|
cards(Request): array |
обов'язковий | картки в порядку показу |
name() |
назва класу в Title Case через __() |
назва в меню й заголовок сторінки |
uriKey() |
kebab-case назви класу | сегмент URL: /admin/dashboards/content |
$displayInNavigation |
true |
показувати в бічному меню. false лишає дашборд доступним за адресою |
canSee(Closure) |
fn (Request $request): bool, хто бачить дашборд |
|
make(...$args) |
створює екземпляр |
Розміри карток і підказки задаються на самих картках: width(), help(), canSee()
(Метрики).
Реєстрація
Дашборди повертає метод dashboards() провайдера застосунку App\Providers\LarsadminServiceProvider
(його створює larsadmin:install). Порядок у масиві це порядок у меню.
use App\Larsadmin\Dashboards\Content;
use App\Larsadmin\Dashboards\Overview;
protected function dashboards(): array
{
return [
Overview::class, // клас або екземпляр
Content::make()->canSee(fn (Request $request) => $request->user()->can('viewAnalytics')),
];
}
За замовчуванням там стоїть new Main: вбудований дашборд Maxcxam\Larsadmin\Dashboards\Main
з назвою «Головна» (uriKey main) і без карток. Можна також викликати
Larsadmin::dashboards([...]) напряму: виклик замінює раніше зареєстровані дашборди. Порожній
список означає один Main.
Елементи масиву: екземпляр Dashboard або назва його класу (створюється через make()). Будь-що
інше, а також два дашборди з однаковим uriKey() кидають InvalidArgumentException. Так само
дві картки з однаковим uriKey() в одному дашборді чи Entity кидають InvalidArgumentException.
Головна сторінка
/adminпоказує перший зареєстрований дашборд, який користувач може бачити (canSee).- Якщо в дашборда немає видимих карток (як у
Main), сторінка показує список Entity, як до появи дашбордів. - Якщо жоден дашборд не видимий,
/adminтеж показує список Entity.
Бічне меню
- Видимий один дашборд: у меню один пункт з його назвою, що веде на
/admin. - Видимих кілька: меню показує групу «Дашборди» з усіма видимими дашбордами, у яких
$displayInNavigation = true. Пункт домашнього дашборда веде на/admin, решта на/admin/dashboards/{uriKey}.
Доступ
| Перевірка | Наслідок |
|---|---|
доступ до панелі (gate viewLarsadmin, Авторизація) |
без нього недоступні всі сторінки й ендпоінти дашбордів |
canSee() дашборда |
невидимий дашборд відповідає 404 і на сторінці, і на ендпоінтах його метрик |
canSee() картки |
невидима картка не потрапляє на сторінку, її ендпоінт відповідає 404 |
| джерело метрики | Entity-джерело потребує viewAny і обмежене indexQuery(); клас моделі чи builder не обмежені (Метрики) |
canSee() дашборда не перевіряє доступ до даних карток. Захищайте чутливі числа на рівні
метрики: Entity-джерелом або canSee() картки.
Картки над списком Entity
Entity::cards() показує метрики над таблицею списку цієї Entity:
// app/Larsadmin/Post.php
public function cards(Request $request): array
{
return [
NewPosts::make(),
PostsByStatus::make(),
MonthlyPublishingGoal::make(),
];
}
- Картки показуються лише на сторінці списку, не на сторінці перегляду запису.
- Дані йдуть з
GET {path}/api/entities/{entity}/metrics/{metric}. БезviewAnyдля Entity ендпоінт відповідає 403, невидима картка 404. - Картки не обмежуються поточними фільтрами й пошуком списку: метрика рахує своє джерело.
- Ті самі класи метрик можна використовувати й на дашбордах. Кеш (
cacheFor()) ведеться окремо для кожного власника картки.
Власні картки
І Dashboard::cards(), і Entity::cards() приймають, крім метрик, картки розширень (з 1.5): статичні
спадкоємці Card і картки з даними DataCard. Картка з даними проходить ті самі перевірки, що й
метрика (видимість дашборда чи viewAny Entity, canSee()), а її параметри валідуються rules().
Додаткові props будь-якій картці дає withMeta():
public function cards(Request $request): array
{
return [
NewPosts::make(),
TopRated::make()->width('1/2'), // DataCard розширення
Welcome::make()->withMeta(['links' => $this->links()]), // статична картка
];
}
Див. Розширення: картки.
Часовий пояс
Періоди всіх метрик рахуються в часовому поясі панелі: Larsadmin::timezoneUsing(), далі
larsadmin.timezone, далі app.timezone. Див. Метрики.
Далі: Файли й зображення.