Laravel Filament 3 Add widgets to resource pages 学習メモ

Laravel Filament 3 Add widgets to resource pages 学習メモ

Add widgets to resource pages

filament のウィジェットを各画面のヘッダーやフッターに追加する。

参考ドキュメント

https://filamentphp.com/docs/3.x/panels/dashboard#customizing-the-dashboard-page

/App/Filament/Resources/UserResource/Pages/ListUsers.php の編集

<?php

namespace App\Filament\Resources\UserResource\Pages;

use App\Filament\Resources\UserResource;
use App\Filament\Resources\UserResource\Widgets\UserStatsWidget;
use Filament\Actions;
use Filament\Resources\Pages\ListRecords;
use App\Filament\Widgets\TestWidget;

class ListUsers extends ListRecords
{
    protected static string $resource = UserResource::class;

    protected function getHeaderActions(): array
    {
        return [
            Actions\CreateAction::make(),
        ];
    }

    protected function getHeaderWidgets(): array
    {
        return [
            UserStatsWidget::class,
            // TestWidget::class,
        ];
    }

    protected function getFooterWidgets(): array
    {
        return [
            // TestWidget::class,
        ];
    }
}

/App/Filament/Resources/UserResource/Widgets/UserStatsWidget.php の追加

sail artisan make:filament-widget

UserStatsWidget

Stats overview

UserResouce

<?php

namespace App\Filament\Resources\UserResource\Widgets;

use App\Models\User;
use Filament\Widgets\StatsOverviewWidget as BaseWidget;
use Filament\Widgets\StatsOverviewWidget\Stat;

class UserStatsWidget extends BaseWidget
{
    protected function getStats(): array
    {
        return [
            Stat::make('Total Users', User::count()),
            Stat::make('Total Admins', User::where('role', User::ROLE_ADMIN)->count()),
            Stat::make('Total Editors', User::where('role', User::ROLE_EDITOR)->count()),
        ];
    }
}