Ayarlar ve yapılandırma
CPalius'ta iki ayrı "yapılandırma" kavramı vardır ve karıştırılmamalıdır:
| Ayarlar | Yapılandırma senkronu (config sync) | |
|---|---|---|
| Nerede | Veritabanında (cp_settings) |
cp-content/config/sync/*.yaml dosyalarında |
| Kim değiştirir | Yönetici, panelden | Geliştirici, Git ile |
| Ne için | Site adı, SMTP, güvenlik modları… | Roller, iş akışları, yol kalıpları, alan tanımları |
| Taşınma | Yedekle/geri yükle ya da cp:config ile |
Git |
İkisi cp:config ile köprülenir: ayarlar ve alanlar YAML'a dışa aktarılır, YAML'dan içe aktarılır.
Ayar tanımlamak: #[CpSetting]
Her ayar, derleme sırasında toplanan bir özniteliktir. Kural olarak boş bir taşıyıcı sınıfa yığılır:
#[CpSetting(key: 'shop.currency', label: 'shop.setting.currency', type: 'select',
default: 'TRY', variants: ['TRY' => 'Türk Lirası', 'EUR' => 'Euro'],
module: 'shop', group: 'shop_general')]
#[CpSetting(key: 'shop.notice', label: 'shop.setting.notice', type: 'textarea',
translatable: true, module: 'shop', group: 'shop_general')]
#[CpSetting(key: 'shop.api_secret', label: 'shop.setting.api_secret', type: 'password', module: 'shop')]
final class ShopSettings
{
}
| Parametre | Anlamı |
|---|---|
key |
Benzersiz kimlik: modul.ad |
label |
Ekranda görünen etiket (çeviri anahtarı olabilir) |
type |
text, checkbox, select, textarea, integer, password |
default |
Veritabanında satır yoksa dönen değer |
variants |
select seçenekleri (değer => etiket) |
module |
Sahip modül/eklenti kimliği; çekirdek için core |
group |
Ekranda hangi bölümün altında toplanacağı |
translatable |
Değer {"tr": "...", "en": "..."} haritası olarak saklanır (yalnız text ve textarea) |
scope |
Ayar sekmesi: core, module ya da plugin. Boşsa module alanından otomatik bulunur |
Ayarlar AACP → Sistem → Sistem Ayarları altında sekmeler halinde görünür; tanımı eklemek ekranı da kendiliğinden oluşturur.
Okumak
$currency = $settings->get('shop.currency'); // varsayılan 'TRY'
$notice = $settings->getForLocale('shop.notice', 'en'); // dile göre
$all = $settings->getTranslations('shop.notice'); // ['tr' => '…', 'en' => '…']
Çevrilebilir bir ayar için okuma sırası: istek dili → varsayılan dil → ilk dolu değer → $default.
Değerler istek başına bellekte tutulur ve cache.app içinde önbelleğe alınır (tek sorgu ile yüklenir). Ayarı kodla yazıyorsanız sonrasında clearCache('shop.currency') çağırın; panel bunu kendisi yapar.
Şifreli ayarlar
type: 'password' ayarlar (SMTP parolası, CAPTCHA gizli anahtarı, API kimlik bilgileri) veritabanında şifrelenmiş saklanır (SettingSecretCodec). Salt okunur bir SQL enjeksiyonu ya da paylaşılan bir veritabanı yedeği bu değerleri düz metin olarak vermez. Kodlanmış değer belirgin bir işaret taşır, bu yüzden şifreleme eklenmeden önce yazılmış düz metin değerler "bozuk şifre" sanılmaz, "eski düz metin" olarak tanınır.
Çekirdek ayar anahtarları
Varsayılanlarıyla başlıca ayarlar. (Güvenlik ayarlarının tamamı Güvenlik sayfasında.)
Site
| Anahtar | Varsayılan | |
|---|---|---|
core.site_name |
CPalius CMF |
Site adı |
core.site_description |
boş | Site açıklaması |
core.maintenance_mode |
kapalı | Bakım modu |
core.maintenance_message |
boş | Bakım sayfası mesajı |
core.default_locale |
tr |
Varsayılan dil |
core.timezone |
Europe/Istanbul |
Saat dilimi |
core.permalink_structure |
postname |
Kalıcı bağlantı yapısı |
core.default_meta_title_format |
%%title%% – %%site_name%% |
Varsayılan başlık biçimi |
homepage.mode |
portal |
Ana sayfa modu (portal ya da simple ana sayfa) |
E-posta
| Anahtar | Varsayılan |
|---|---|
mail.enabled |
kapalı |
mail.smtp_host, mail.smtp_port |
boş, 587 |
mail.smtp_encryption |
tls |
mail.smtp_user, mail.smtp_password |
boş (parola şifreli saklanır) |
mail.from_email, mail.from_name |
boş |
mail.log_retention_days |
90 |
Hesap kaydı
| Anahtar | Varsayılan |
|---|---|
account.registration_enabled |
açık |
account.require_email_verification |
kapalı |
account.require_admin_approval |
kapalı |
account.username_required |
açık |
account.require_terms |
açık |
İçerik
| Anahtar | Varsayılan |
|---|---|
content.revisions.enabled |
açık |
content.revisions.max_per_node |
25 |
content.moderation.enabled_types |
boş (hiçbir tür iş akışına girmez) |
content.moderation.workflow |
editorial |
Bildirim, günlük, denetim
| Anahtar | Varsayılan |
|---|---|
notification.enabled, notification.digest.enabled |
açık, açık |
logging.min_level |
warning |
logging.retention_days |
30 |
audit.enabled, audit.retention_days |
açık, 365 |
Çerez onayı (Consent)
consent.enabled varsayılan kapalı. Açıldığında analitik ve pazarlama çerezleri için ayrı onay kategorileri (consent.analytics_enabled, consent.marketing_enabled) ve tüm düğme/mesaj metinleri ayarlarla özelleştirilir.
Performans ve depolama ayarları Önbellek ve performans ile Medya ve depolama sayfalarındadır.
Yapılandırma senkronu (config sync)
php cp-core/bin/console cp:config export # canlı yapılandırmayı YAML'a yaz
php cp-core/bin/console cp:config status # sapma (drift) var mı?
php cp-core/bin/console cp:config import # YAML'ı uygula (varsayılan: deneme)
php cp-core/bin/console cp:config import -f # gerçekten uygula
php cp-core/bin/console cp:config import --only=settings
Tasarım özellikleri:
- Deterministik: anahtarlar özyinelemeli sıralanır; iki ortam aynı yapılandırmaya sahipse YAML dosyaları bayt bayt aynı çıkar. Git farkı yalnızca gerçek değişikliği gösterir.
- Taşınabilir: dışa aktarım kimlik (id) ve zaman damgası içermez.
- İşlemsel: içe aktarım tek veritabanı işleminde çalışır; sağlayıcılar kalıcılaştırır ama flush etmez.
- Sağlayıcı tabanlı: her yapılandırma türü bir
ConfigProviderInterfaceuygular ve bir ya da daha fazla "belge" sahiplenir. Çekirdeğin sağlayıcıları: ayarlar (settings), alanlar (field.<bundle>), taksonomi, metin biçimleri, yol kalıpları, varlık görüntüleme.
Bir modül kendi yapılandırmasını eklemek isterse ConfigProviderInterface uygular: documents(), exportDocument(), diffDocument(), importDocument() ve afterImport().
Geliştirmede alan ekle → cp:config export → Git'e commit → canlıda dosyaları güncelle → cp:config status ile farkı gör → cp:config import -f.
Roller (user.role.*.yaml) ve iş akışları (workflow/*.yaml) doğrudan dosyadır; veritabanında karşılıkları yoktur, bu yüzden dışa aktarıma ihtiyaç duymazlar. Dosyayı düzenleyin, önbelleği temizleyin.