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 协议》,转载必须注明作者和本文链接
人生就是马拉松,精彩的是后半程
running8
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!