回部落格
filamentphpspatiesettinglaravelplugin

如何在 FilamentPHP 中使用 Spatie Setting 插件

在 FilamentPHP 中整合 Spatie Laravel Settings 插件的完整教學,涵蓋安裝、config 設定、Panel 註冊,以及常見錯誤排除。

Steven Chang
Steven Chang
2025年6月17日 01 Min read
訂閱
如何在 FilamentPHP 中使用 Spatie Setting 插件

在 Filamentphp 開發過程中,使用 Spatie Setting 插件,一開始一直卡關,所以寫這篇文章記錄一下。

安裝 Spatie Setting 插件

插件 filament-spatie-settings

安裝 spatie-laravel-settings-plugin

composer require filament/spatie-laravel-settings-plugin:"^3.2" -W

安裝相關 migration 和 class

用 spatie/laravel-settings 這個套件,所以需要根據 installation 來安裝相關 migration 和 class

安裝 migration

php artisan vendor:publish --provider="Spatie\LaravelSettings\LaravelSettingsServiceProvider" --tag="migrations"
php artisan migrate

你會取得 migration 如下,並且執行 migrate

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up()
    {
        Schema::create('settings', function (Blueprint $table): void {
            $table->id();

            $table->string('group');
            $table->string('name');
            $table->boolean('locked')->default(false);
            $table->json('payload');

            $table->timestamps();

            $table->unique(['group', 'name']);
        });
    }
};

安裝 class

publish setting 的 class,位置 app/Settings

php artisan vendor:publish --provider="Spatie\LaravelSettings\LaravelSettingsServiceProvider" --tag="config"

製作 setting class

# php artisan make:setting SettingName --group=groupName
php artisan make:filament-settings-page ManageGeneras GeneralSettings

這樣就會在 app/Settings 目錄下產生一個 GeneralSettings.php 的檔案。

use Spatie\LaravelSettings\Settings;

class GeneralSettings extends Settings
{
    public string $site_name;
    public bool $site_active;

    public static function group(): string
    {
        return 'general';
    }
}

新增你的 setting class 到你的 /config/settings.php

    /*
     * Each settings class used in your application must be registered, you can
     * add them (manually) here.
     */
    'settings' => [
        GeneralSettings::class
    ],

產生需要的 properties

php artisan make:settings-migration CreateGeneralSettings

這樣會在 database/database/settings 目錄下產生一個 ...create_general_settings.php 的檔案。

use Spatie\LaravelSettings\Migrations\SettingsMigration;

return new class extends SettingsMigration
{
    public function up(): void
    {
        $this->migrator->add('general.site_name', 'Spatie');
        $this->migrator->add('general.site_active', true);
    }
}
php artisan migrate

這樣就完成 spatie/laravel-settings 基礎設定

準備 filament setting Resource

php artisan make:filament-settings-page ManageGeneras GeneralSettings

這樣會在 app/Filament/Pages 下產生一個 ManageGenerals.php,確認 $settings 是不是剛剛的 Setting class

protected static string $settings = GeneralSettings::class;

輸入在自己的 Resource 裡面,然後在 form() 方法裡面新增欄位。

use Filament\Forms\Components\Repeater;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Form;

public function form(Form $form): Form
{
    return $form
        ->schema([
            TextInput::make('copyright')
                ->label('Copyright notice')
                ->required(),
            Repeater::make('links')
                ->schema([
                    TextInput::make('label')->required(),
                    TextInput::make('url')
                        ->url()
                        ->required(),
                ]),
        ]);
}

結果如下

result.png

分享

如何在 FilamentPHP 中使用 Spatie Setting 插件
如何在 FilamentPHP 中使用 Spatie Setting 插件

在 FilamentPHP 中整合 Spatie Laravel Settings 插件的完整教學,涵蓋安裝、config 設定、Panel 註冊,以及常見錯誤排除。

Gooliya 鼓櫟數位
Steven Chang

Steven Chang

軟體工程師,平常主要有個人接案、DevOps、系統開發、維運。研究 AI 是為了省下時間陪小朋友。

專案卡住了,或是想把重複的工作交出去?

我做 AI 專案救援、系統架構開發、AI Agent 與流程自動化。先聊聊你的情況,不用先想清楚要做什麼。

免費訂閱 Gooliya 鼓櫟數位電子報

雜談 AI、開發與自動化,新文章上線時寄給你。

訂閱服務由 Kit 提供,Email 只用來寄送新文章