Yapılandırma Okuma ve Yazma

1.7k görüntülenme Markdown

Ayarlar farklı kuralları olan iki yerde durur: talep üzerine yüklenen PHP dosyaları ve dosyaya ait olmayan değerler için veritabanı satırları.

Genel Bakış

Yapılandırma dosyası, dizi döndüren bir PHP dosyasıdır. Birini okumak bir dosya işlemi değil, bir yol ifadesidir: dosyayı adlandırır, sonra eğik çizgilerle dizinin içine yürürsünüz; dosya, ilk soruluşta yüklenir.

İkinci depo bir tablodur; geliştiricinin gönderdiği yapılandırma değil, kuruluma özgü durum olan değerler için. İkisine de aynı sınıftan, farklı metot adlarıyla erişilir ve kaçınmaya değer hata yanlış olanı seçmektir.

Referans

Dosya Tabanlı Ayarlar

Config, dosyalar
public static function get($arg = null);
public static function set($key, $values, $merge = false): array|false;
public static function save($name = '', $data = []): bool;
public static function merge($arg = []): bool;
get($arg) İlk yol parçası dosyadır, gerisi onun döndürdüğü dizinin içine yürür. Eksik olan her parça false yanıtlar, yani saklanmış bir false ile hiç ayarlanmamış bir anahtar aynı görünür. Argümansız çağrı o ana kadar yüklenmiş dosyaları verir, var olan bütün dosyaları değil.
set($key, $values, $merge) Yüklü kopyayı bu istek için değiştirir, hiçbir şey yazmaz. İlk argüman dosya adı, ikincisi değerlerdir. [$key => $birlesmis] yanıtlar; değerler boşsa ya da dosya yoksa false.
save($name, $data) Diziyi dosyasına geri yazar ve yüklü kopyayı tazeler; böylece aynı istekteki sonraki okuma yeni değeri görür. İkinci argüman verilmezse o dosya için bellekte ne varsa onu kaydeder. Yazmanın başarılı olup olmadığını yanıtlar.
merge($arg) Bu istek için yüklü kümeye bütün girdiler katar; yani anahtarları ayar değil dosya adıdır. Diskte karşılığı olmayan sanal bir dosya için kullanışlıdır.
coremio/configuration Dosyaların durduğu yer, ad başına bir tane: general, options, theme, crypt, sms ve diğerleri.

save Neyi Bekler, Neyi Yazar

Dosya, döndürülen bir dizidir ve kendi adına sarılmış olabilir de olmayabilir de. İki biçim de kabul edilir: diskteki dosya sarılıysa ve verdiğiniz veri değilse, yazmadan önce sizin için sarılır.

diskteki dosya ve onu üreten iki biçim
<?php
return [
    'cache'    => 'on',
    'rich-url' => 'on',
];
iki çağrı da doğrudur
Config::save("general", ['cache' => 'on', 'rich-url' => 'on']);
Config::save("general", ['general' => ['cache' => 'on', 'rich-url' => 'on']]);

Kaynak, dizi dışa aktarıcısıyla üretilir ve dosya yöneticisinden geçirilerek yazılır; o da az önce değiştirdiği dosyanın derlenmiş kopyasını geçersiz kılar. Ham bir yazma bunu kendi yapmak zorundadır.

Veritabanı Tabanlı Ayarlar

Config, satırlar
public static function getd($name = '');
public static function setd($name = '', $content = '');
public static function deld($name = '');
getd($name) Adlandırılmış tek satırı okur. Geçerli JSON olan bir değer çözülmüş hâlde geri gelir; yani dizi yine dizidir, saklanan bir sayı sayıdır, ama yalnız çözülen değer doğru değerliyken: saklanan sıfır, boş dizi ve boş nesne yazıldıkları metin olarak geri gelir, yani 0, [] ve {}. Var olmayan satır null yanıtlar.
setd($name, $content) Ada göre ekler ya da günceller. Dizi sizin için kodlanır, kalan her şey verildiği gibi saklanır. Yeni satıra bir oluşturma ve bir güncelleme zamanı yazılır; güncelleme yalnız güncelleme zamanına dokunur.
deld($name) Satırı siler. Yumuşak silme yoktur ve sonraki okuma null yanıtlar.

Depo Seçimi

DeğerDepoNeden
Operatörün bir kez ayarladığı anahtarDosyaNeredeyse her istekte okunur; dosya okuma sorgudan ucuzdur
Bir servisin kimlik bilgileriDosya, modülün kendi dosyasıModülle birlikte taşınır, tablolara dağılmaz
Uygulamanın kendi güncellediği durumVeritabanıSık yazılır ve dosya yazımı bunun için doğru araç değildir
Tek bir operatörün tercihiHiçbiriKişiye özel tercih kuruluma değil o kişiye aittir

Örnek

Dosyayı okuyun, değeri değiştirin, yazın ve aynı istekte geri okuyun.

bir ayar operation'ı
public function save_general(Operation $operation): bool
{
    $operation->demo();

    $data          = Config::get("general");                  // dosyanın tamamı
    $data['cache'] = Filter::init("POST/cache", "route") === 'on' ? 'on' : 'off';

    if (!Config::save("general", $data))
        throw new Exception(Language::gc("error/settings-not-written"));

    // Aynı istek, ve değer şimdiden yenisi.
    $now = Config::get("general/cache");

    // Uygulamanın sahip olduğu durum bunun yerine satır deposuna gider.
    Config::setd("last_settings_change", ['at' => date('c'), 'cache' => $now]);

    return $operation->output(['status' => "successful", 'cache' => $now]);
}
satırı başka bir yerde geri okuma
$state = Config::getd("last_settings_change");   // dizi, sizin için çözülmüş

if ($state === null) {
    // Hiç yazılmamış ya da kaldırılmış. "Boş olarak yazılmış" ile aynı şey değil.
}

Tuzaklar

set'in üçüncü argümanı adının tersini yapar

Varsayılanında bırakılırsa özyinelemeli olarak değiştirir, yani iç içe bir anahtarın altındaki kardeşler yaşamaya devam eder. True geçmek yalnız en üst seviyede birleştirir; bu da iç içe bir diziyi bütün olarak değiştirir ve adını anmadığınız anahtarları düşürür. Bir grubun altındaki tek anahtarı değiştirmek varsayılan davranıştır, birleştiren davranış değil.

Bellekte değiştirmek kalıcı kılmaz

Ayarlayıcı ile kaydedici bilerek ayrıdır; böylece bir istek dosyayı yeniden yazmadan kendisi için bir ayarı geçersiz kılabilir. Bir değişikliğin isteği aşması gerekiyorsa kaydedin; veri argümanı verilmeden yapılan kayıt, ayarlayıcının bellekte bıraktığı neyse onu işler.

Yapılandırma dosyası derlenen PHP'dir

Sunucu derlenmiş bir kopyayı tutup dosya değiştikten sonra da sunmaya devam edebilir; kayıt başarılı görünür ve eski değer bir sonraki sayfada geri gelir. O kopyayı geçersiz kılan dosya yöneticisiyle yazın; ham yazma bunu kendi yapmak zorundadır.

Yapılandırma kurulum genelidir

Herkes için tek bir değer vardır. Kişisel bir tercihi buraya koymak, onu değiştiren ilk operatörün diğer bütün operatörler için de değiştirmesi demektir; o tür bir değer çereze ya da kullanıcı kaydına aittir.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.