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
- Install package
composer require spatie/laravel-settings
- Publish migration & config
php artisan vendor:publish --provider="Spatie\LaravelSettings\LaravelSettingsServiceProvider" --tag="migrations"
php artisan vendor:publish --provider="Spatie\LaravelSettings\LaravelSettingsServiceProvider" --tag="config"
- Jalankan migration
php artisan migrate
Membuat Settings Class
Kamu bisa generate class settings dengan artisan:
php artisan make:setting GeneralSettings --group=general
Contoh class settings:
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):
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:
$siteName = app(GeneralSettings::class)->site_name;
Update settings:
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:
php artisan make:settings-migration CreateGeneralSettings
Contoh migration:
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:
class GeneralSettings extends Settings
{
public static function encrypted(): array
{
return ['site_name'];
}
}
- Custom repository (multi-tenant, Redis, dsb):
class GeneralSettings extends Settings
{
public static function repository(): ?string
{
return 'global_settings';
}
}
- Global casts untuk tipe data khusus:
// config/settings.php
'global_casts' => [
DateTimeInterface::class => Spatie\LaravelSettings\SettingsCasts\DateTimeInterfaceCast::class,
],
- Lock/unlock property:
$settings->lock('site_name');
$settings->unlock('site_name');
- Cache settings:
// Aktifkan di config/settings.php
'cache' => [
'enabled' => env('SETTINGS_CACHE_ENABLED', false),
'store' => null,
'prefix' => null,
],
- Clear cache:
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: