Filamen 数据自动更新的页面小部件
如果已经在 laravel 项目中安装了 Filment 且已经有了 User 模型和 users 表。
先给 users 表添加两个字段
php artisan make:migration add_fields_to_users_table --table=users
修改 User Migration 文件:
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('users', function (Blueprint $table) {
$table->boolean('is_admin');
$table->boolean('is_active');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('is_admin');
$table->dropColumn('is_active');
});
}
...
修改 User Factory 定义方法:
//database\factories\UserFactory.php
public function definition()
{
return [
'name' => fake()->name(),
'email' => fake()->unique()->safeEmail(),
'email_verified_at' => now(),
'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
'remember_token' => Str::random(10),
'is_admin' => fake()->boolean(),
'is_active' => fake()->boolean(),
];
}
修改 DatabaseSeeder 运行方法,创建100个用户:
//database\seeders\DatabaseSeeder.php
public function run()
{
\App\Models\User::factory(100)->create();
}
修改 User 模型的 fillable 属性
//app/Models/User.php
protected $fillable = [
'name',
'email',
'password',
'is_active',
'is_admin'
];
运行 migrate 命令
php artisan migrate --seed
OK,数据已经准备好了。
创建 User filament 资源和页面部件:
php artisan make:filament-resource User --simple
修改 User filament资源文件
form:
//app/Filament/Resources/UserResource.php
public static function form(Form $form): Form
{
return $form
->schema([
Forms\Components\TextInput::make('name')
->required()
->maxLength(255),
Forms\Components\TextInput::make('email')
->email()
->required()
->maxLength(255),
Forms\Components\Toggle::make('is_admin'),
Forms\Components\Toggle::make('is_active'),
]);
}
table:
//app/Filament/Resources/UserResource.php
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('name'),
Tables\Columns\TextColumn::make('email'),
Tables\Columns\IconColumn::make('is_admin')
->boolean(),
Tables\Columns\IconColumn::make('is_active')
->boolean(),
Tables\Columns\TextColumn::make('created_at')
->date(),
Tables\Columns\TextColumn::make('updated_at')
->date(),
])
->filters([
Tables\Filters\TernaryFilter::make('is_admin'),
Tables\Filters\TernaryFilter::make('is_active'),
])
->actions([
Tables\Actions\EditAction::make(),
Tables\Actions\DeleteAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
]);
}
为 User 资源注册页面部件
php artisan make:filament-widget UserOverview --resource=UserResource --stats-overview
//app/Filament/Resources/UserResource.php
use App\Filament\Resources\UserResource\Widgets\UserOverview;
public static function getWidgets(): array
{
return [
UserOverview::class,
];
}
给表格页面的加入页面部件
/app/Filament/Resources/UserResource/Pages/ManageUsers.php
protected function getHeaderWidgets(): array
{
return [
UserOverview::class,
];
}
修改 User 页面部件文件
//app/Filament/Resources/UserResource/Widgets/UserOverview.php
class UserOverview extends BaseWidget
{
protected static ?string $pollingInterval = null;
protected function getCards(): array
{
$usersCount = User::selectRaw('
COUNT(*) as total,
SUM(CASE WHEN is_admin THEN 1 ELSE 0 END) AS admin,
SUM(CASE WHEN is_active THEN 1 ELSE 0 END) AS active
')->first();
return [
Card::make('Total', $usersCount->total)
->color('primary')
->description('Total users'),
Card::make('Admin', $usersCount->admin)
->color('danger')
->description('Admin users'),
Card::make('Active', $usersCount->active)
->color('success')
->description('Active users'),
];
}
}
检查浏览器上的“用户资源”。我们有三个标题小部件:Total users、Admin users和Active users。
您可以删除表中的用户,这些小部件会更新。
本作品采用《CC 协议》,转载必须注明作者和本文链接