Showing Posts From
Setting
-
gooliya.papa - 17 Jun, 2025
如何在 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安裝 migrationphp 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']); }); } };安裝 classpublish 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(), ]), ]); }結果如下