SettingManagement, sistemdeki tüm yapılandırma (ayar/setting) değerlerini merkezi şekilde yönetmeyi sağlayan bir Laravel modülüdür.
Bu tasarım sayesinde tüm tenant'larda aynı ayar tanımı kullanılırken her tenant kendi değerini saklar.
Ayar gruplarını tanımlar. Hiyerarşik yapı destekler (parent_id ile alt gruplar).
| Sütun | Tür | Açıklama |
|---|---|---|
| id | BigInt | Grup ID (Primary Key) |
| parent_id | BigInt (Nullable) | Ana grup (NULL = Ana kategorisi) |
| prefix | String (Nullable) | Ayar key prefix'i (örn: "site" → site_title, site_logo) |
| name | String | Grup adı (Türkçe, örn: "Site Ayarları") |
| slug | String (Unique) | URL friendly slug (örn: "site-ayarlari") |
| description | Text (Nullable) | Grup açıklaması |
| icon | String (Nullable) | FontAwesome icon (örn: "fas fa-cogs") |
| layout | JSON (Nullable) | Form layout tanımı (admin panel görünümü) |
| is_active | Boolean | Grup aktif mi? (default: true) |
| created_at, updated_at, deleted_at | Timestamp | Soft delete ile |
Ayar tanımlarını içerir. Tüm tenant'lar için geçerlidir (Values tenant'a özel).
| Sütun | Tür | Açıklama |
|---|---|---|
| id | BigInt | Setting ID (Primary Key) |
| group_id | BigInt (FK) | Ait olduğu grup ID'si |
| label | String | Arayüzde gösterilen ad (Türkçe, örn: "Site Adı") |
| key | String (Unique) | Ayar anahtarı (örn: "site_title") - Kodda kullanılır |
| type | String | Input türü: text, textarea, select, image, file, favicon, json vb. |
| options | JSON (Nullable) | Select seçenekleri (örn: {"option1": "Seçenek 1"}) |
| default_value | Text (Nullable) | Varsayılan değer (Settings Value boşsa kullanılır) |
| is_required | Boolean | Zorunlu mu? |
| is_system | Boolean | Sistem tarafından mı kontrol ediliyor? |
| is_active | Boolean | Aktif mi? |
| help_text | Text (Nullable) | Admin panel'de yardım metni |
Her tenant'ın ayar değerlerini saklar. Tenant veritabanında yer alır.
| Sütun | Tür | Açıklama |
|---|---|---|
| id | BigInt | Primary Key |
| setting_id | BigInt (Unique) | Central DB'deki setting ID'si (Foreign Key yok, manual) |
| value | Text (Nullable) | Gerçek ayar değeri |
| created_at, updated_at | Timestamp | Oluşturulma ve güncellenme tarihleri |
Önemli: SettingValue'dan Setting'e Foreign Key olmuyor çünkü farklı veritabanlarında. Bunun yerine setting_id ile elle ilişkilendirilir.
Sistemde halihazırda tanımlı olan ayar grupları:
| ID | Grup Adı | Slug | Prefix | Ana Grup |
|---|---|---|---|---|
| 1 | Genel Sistem | genel-sistem | - | Ana kategori |
| 5 | Site | site | - | Ana kategori |
| 6 | Site Ayarları | site-ayarlari | site | Genel Sistem (1) |
| 7 | Tema | tema | theme | Site (5) |
| 8 | SEO Ayarları | seo-ayarlari | seo | Genel Sistem (1) |
| 9 | Yapay Zeka | yapay-zeka | ai | Genel Sistem (1) |
| 10 | İletişim Bilgileri | iletisim-bilgileri | - | Ana kategori |
| 11 | Bildirim Ayarları | bildirim-ayarlari | - | Ana kategori |
| 12 | Payment Gateway Ayarları | payment-gateway-ayarlari | - | Ana kategori |
| 18 | Blog - Yapay Zeka | blog-yapay-zeka | blog_ai | Genel Sistem (1) |
Yeni bir seeder dosyası oluşturun:
Seeder içeriğinde yapılacaklar:
Örnek Seeder Yapısı:
Seeder'ı database'e eklemek için:
Veya doğrudan:
Oluşturduğunuz ayarları kodda kullanın:
Prefix, SettingGroup'a verilen bir ön ek kodu olup, o grup altındaki tüm ayarların key'lerinin otomatik olarak ön ekine konur.
Ana kategorilerin (parent_id = NULL) prefix'i olmayabilir. Bu durumda alt gruplar prefix alır:
| Tip | Örnek | Açıklama |
|---|---|---|
| text | site_title | Tek satır metin input |
| textarea | ai_custom_instructions | Çok satırlı metin alanı |
| select | ai_response_tone | Dropdown seçim (options gerekli) |
| image | site_logo_2 | Görsel yükleme (Spatie Media Library) |
| file | site_logo | Dosya yükleme |
| favicon | site_favicon | Favicon yükleme |
| json | ai_knowledge_base | JSON verisi |
| image_multiple | gallery_images | Çoklu görsel |
Layout, admin panel'de form'un nasıl görüneceğini tanımlayan JSON yapısıdır. Her ayarın yerini, sırasını, başlıklarını vb. belirler.
Yeni ayar grubu oluşturmak için migration dosyası gerekmez, ama benzer sistemler için gerekir:
Aynı setting key'i farklı tenant'larda farklı değerlere sahip olabilir.
Eğer bir setting sadece belirli bir tenant'a ait olmalıysa:
Örnek:
Yeni setting grubu oluşturken şu template'i kullanın: