Filament 基础配置指南:

1. 安装Filament

composer require filament/filament:"^4.0"

php artisan filament:install --panels

php artisan vendor:publish --tag=filament-config

# 可选,导入,导出csv文件使用
php artisan make:queue-batches-table
php artisan make:notifications-table

php artisan vendor:publish --tag=filament-actions-migrations
php artisan migrate

2. 生成Filament 主题

# 生成 theme.css
php artisan make:filament-theme --pm=pnpm

# 修改 vite.config.js,将下面内容加入到 input 数组中
"resources/css/filament/admin/theme.css"

# 在管理面板提供者中注册主题
->viteTheme('resources/css/filament/admin/theme.css')

3. 优化 Filament 主题

# 优化的css文件放入 theme.css。 例:resources/css/filament/themes/***.css';
@import '../themes/***.css';

# 执行pnpm run build 命令,重构资源
pnpm run build

4. 创建crud资源


# 建表,后面生成的resource数据,可以根据表自动生成相关字段的数据
php artisan make:migration create_articles_table
php artisan migrate

# 生成model
php artisan make:model Article

# 创建resouce
php artisan make:filament-resource Article --model

# 若页面没有刷新,要清除缓存
 php artisan filament:clear-cached-components

开放Filament resource资源,允许自定义

# Publishing [filament-views] assets.  
# Copying directory [vendor/filament/support/resources/views] to [resources/views/vendor/filament]

php artisan vendor:publish --tag="filament-views"

# INFO  Publishing [filament-panels-views] assets.  
# Copying directory [vendor/filament/filament/resources/views] to [resources/views/vendor/filament-panels]

php artisan vendor:publish --tag="filament-panels-views"

# 导出多语言
php artisan vendor:publish --tag=filament-panels-translations

常用插件

1. 集成bezhansalleh/filament-shield,配置权限

- 首次创建配置

# 安装依赖
composer require bezhansalleh/filament-shield

# 放出config
php artisan vendor:publish --tag="filament-shield-config"

# user model 中use HasRoles
use Spatie\Permission\Traits\HasRoles;
 
class User extends Authenticatable
{
    use HasRoles;
}

# 执行命令初始化配置
# This command will:  这个命令将会:
# Publish core package config 发布核心包配置
# Publish core package migrations 发布核心包迁移
# Run initial migrations  运行初始迁移
# Publish shield config  发布盾牌配置
php artisan shield:setup

# 给数据库中第一个user配置管理员权限
php artisan shield:install admin

# 发布seeder文件
php artisan shield:seeder

# 发布翻译文件,可修改 组,图标,排序等
php artisan vendor:publish --tag="filament-shield-translations"

- 配置数据填充

# 配置database/seeders/DatabaseSeeder.php

use Spatie\Permission\Models\Role;

$super_admin = User::factory()->create([
    'name' => 'Super Admin',
    'email' => 'admin@admin.com',
    'password' => 'admin',
]);


$this->call(ShieldSeeder::class);
$super_admin_role = Role::first();
$super_admin->assignRole($super_admin_role->id);

- 常用插件权限配置

// unknow-sk/filament-logger (activity记录)
// AppServiceProvider -> boot 方法中注册权限
use Spatie\Activitylog\Models\Activity;
use App\Policies\ActivityPolicy;

Gate::policy(Activity::class, ActivityPolicy::class);


// achyutn/filament-log-viewer (laravel 日志文件管理)
// AdminPanelProvider 中plugins 引入时加入权限
$panel
->plugins([
    FilamentLogViewer::make()
        ->authorize(fn () => auth()->user()->can('View:LogTable'))
])

// 自定义 pages,需要再page中use HasPageShield  例:Dashboard
class Dashboard extends Page
{
    use HasPageShield;
}

2. achyutn/filament-log-viewer 添加日志预览插件

# 安装依赖
composer require achyutn/filament-log-viewer

# Register the plugin inside your Filament panel:

use AchyutN\FilamentLogViewer\FilamentLogViewer;
 
return $panel
    ->plugins([
        FilamentLogViewer::make(),
    ]);

3. unknow-sk/filament-logger 添加活动记录插件

# 安装依赖
composer require unknow-sk/filament-logger

php artisan filament-logger:install

php artisan migrate

# 发布翻译
php artisan vendor:publish --tag="filament-logger-translations"

- 注册资源 in PanelProvider

public function panel(Panel $panel): Panel
{
    return $panel
        ->resources([
            config('filament-logger.activity_resource')
        ]);
}

4. tomatophp/filament-language-switcher 添加多语言切换插件

composer require tomatophp/filament-language-switcher

php artisan filament-language-switcher:install

#  上面命令可能会执行 php artisan migrate

- 注册插件 in PanelProvider

public function panel(Panel $panel): Panel
{
    return $panel
        ->plugin(\TomatoPHP\FilamentLanguageSwitcher\FilamentLanguageSwitcherPlugin::make());
}

- now on your User.php model or any user model add this trait

use \TomatoPHP\FilamentLanguageSwitcher\Traits\InteractsWithLanguages;

- Publish Assets

php artisan vendor:publish --tag="filament-language-switcher-config"

php artisan vendor:publish --tag="filament-language-switcher-lang"