İçeriğe geç

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

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 ConfigProviderInterface uygular 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().

Tipik akış

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.

Son güncelleme: 13.10.2026