Laravel Spatie Settings: Cara Praktis Mengelola Konfigurasi Aplikasi
ProgrammingTutorialLaravelConfiguration#laravel#php#tutorial#spatie

Laravel Spatie Settings: Cara Praktis Mengelola Konfigurasi Aplikasi

A
Abd. Asis
Bagikan:

Pernah merasa ribet harus edit file .env atau config setiap kali mau ganti pengaturan aplikasi Laravel? Atau ingin bikin halaman admin supaya user non-teknis bisa atur setting aplikasi tanpa sentuh kode? Nah, Spatie Laravel Settings hadir sebagai solusi praktis dan modern untuk mengelola konfigurasi aplikasi langsung dari database—tanpa ribet!

Artikel ini akan membimbing kamu step-by-step mulai dari instalasi, setup, sampai best practice menggunakan Spatie Laravel Settings. Semua dijelaskan dengan bahasa santai, analogi sehari-hari, dan contoh kode yang bisa langsung dicoba. Yuk, kita mulai!

Kenapa Perlu Settings Dinamis di Laravel?

Bayangkan kamu punya aplikasi yang butuh pengaturan seperti nama website, status aktif/tidak, atau bahkan pengaturan tema. Kalau semua harus diubah lewat file config, repot banget kan? Dengan settings dinamis, kamu bisa:

  • Update pengaturan tanpa deploy ulang
  • Bikin halaman admin untuk atur setting
  • Simpan konfigurasi per tenant (multi-tenant)
  • Jaga keamanan dengan fitur enkripsi

Instalasi & Setup Awal

  1. Install package
BashBASH
composer require spatie/laravel-settings
  1. Publish migration & config
BashBASH
php artisan vendor:publish --provider="Spatie\LaravelSettings\LaravelSettingsServiceProvider" --tag="migrations"
php artisan vendor:publish --provider="Spatie\LaravelSettings\LaravelSettingsServiceProvider" --tag="config"
  1. Jalankan migration
BashBASH
php artisan migrate

Membuat Settings Class

Kamu bisa generate class settings dengan artisan:

BashBASH
php artisan make:setting GeneralSettings --group=general

Contoh class settings:

PHPPHP
use Spatie\LaravelSettings\Settings;

class GeneralSettings extends Settings
{
    public string $site_name = 'My App';
    public bool $site_active = true;

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

Menyimpan & Mengambil Settings

Ambil settings di controller (dependency injection):

PHPPHP
class IndexController
{
    public function __invoke(GeneralSettings $settings){
        return view('index', [
            'site_name' => $settings->site_name,
            'site_active' => $settings->site_active
        ]);
    }
}

Ambil settings di mana saja:

PHPPHP
$siteName = app(GeneralSettings::class)->site_name;

Update settings:

PHPPHP
class GeneralSettingsController
{
    public function update(Request $request, GeneralSettings $settings){
        $settings->site_name = $request->input('site_name');
        $settings->site_active = $request->boolean('site_active');
        $settings->save();
        return redirect()->back();
    }
}

Migrasi Settings (Tambah, Rename, Hapus)

Buat migration khusus settings:

BashBASH
php artisan make:settings-migration CreateGeneralSettings

Contoh migration:

PHPPHP
use Spatie\LaravelSettings\Migrations\SettingsMigration;

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

Fitur Lanjutan

  • Enkripsi property sensitif:
PHPPHP
class GeneralSettings extends Settings
{
    public static function encrypted(): array
    {
        return ['site_name'];
    }
}
  • Custom repository (multi-tenant, Redis, dsb):
PHPPHP
class GeneralSettings extends Settings
{
    public static function repository(): ?string
    {
        return 'global_settings';
    }
}
  • Global casts untuk tipe data khusus:
PHPPHP
// config/settings.php
'global_casts' => [
    DateTimeInterface::class => Spatie\LaravelSettings\SettingsCasts\DateTimeInterfaceCast::class,
],
  • Lock/unlock property:
PHPPHP
$settings->lock('site_name');
$settings->unlock('site_name');
  • Cache settings:
PHPPHP
// Aktifkan di config/settings.php
'cache' => [
    'enabled' => env('SETTINGS_CACHE_ENABLED', false),
    'store' => null,
    'prefix' => null,
],
  • Clear cache:
BashBASH
php artisan settings:clear-cache

Best Practice & Tips

  • Selalu gunakan type hinting di class settings agar lebih aman dan mudah di-maintain.
  • Jangan lupa jalankan migration setiap ada perubahan struktur settings.
  • Gunakan dependency injection untuk akses settings di controller.
  • Enkripsi property sensitif seperti API key atau password.
  • Manfaatkan fitur cache untuk performa di production.
  • Pisahkan settings per fitur/area aplikasi (misal: GeneralSettings, PaymentSettings, dsb).

Troubleshooting Error Umum

  • Settings tidak ditemukan: Pastikan migration sudah dijalankan dan class sudah diregister.
  • Perubahan tidak tersimpan: Cek method save() sudah dipanggil setelah update property.
  • Type error: Pastikan type property di class sesuai dengan data yang disimpan.
  • Cache tidak update: Jalankan php artisan settings:clear-cache setelah perubahan besar.

Penutup: Konfigurasi Fleksibel, Coding Lebih Nyaman

Dengan Spatie Laravel Settings, kamu bisa mengelola konfigurasi aplikasi dengan cara yang lebih modern, aman, dan fleksibel. Cocok untuk aplikasi skala kecil sampai enterprise. Jangan ragu eksplorasi fitur lanjutan seperti multi-tenant, enkripsi, dan custom repository. Selamat mencoba!


Referensi Lanjutan:

Abd. Asis
Ditulis oleh
Abd. Asis

Software Developer dari Madura. Menulis tentang PHP, Laravel, dan pengembangan web modern dalam Bahasa Indonesia.