Uygulama yapılandırma ayarlarını yönetmek için fikir / çözüm arıyor

4 Cevap php

Ben varsayılan yapılandırma değişkenleri / sabitleri bir sayısını ayarlamak gerekir PHP MVC çerçeve inşa ediyorum. Örnek ayar vars diğerleri arasında sorguları, Doktrin ayarları, oturum olsun, log dosyaları kurtarmak için nerede olurdu. Ben geliştiriciler az yaygara ile yeni projeler oluşturmak mümkün olmak istiyorum, çünkü bu yapılandırma vars varsayılan değerlere sahip olmalıdır. Ancak bu çerçeve gerçekten kullanışlı hale getirmek için, onları bir proje önyükleme dosyasında ya bu varsayılan değerleri geçersiz kılmak gerekiyor, ya da bir kontrolör veya modele içinde. Ben sabitleri kullanmak isterdim, ama onlar üzerine olamaz. Ben sadece (belki de bir tasarım deseni?) Görmüyorum basit bir çözüm olması gerekir gibi hissediyorum. Herhangi bir tavsiye büyük, teşekkürler duyacağız.

4 Cevap

Böyle bir durumda, ben muhtemelen:

  • Create a class that deal with everything configuration-related
    • Bu sınıf / set yapılandırmaları seçenekleri almak için yöntemler içerecektir; ne olursa olsun uygulama ihtiyaçları
    • Uygun zaman da, varsayılan değerleri tanımlamak istiyorum
  • Yapılandırma değerleri yeniden tanımlanabilir hangi bir. Ini veya. Xml dosyasını kullanabilirsiniz

Sınıf instanciating zaman:

  • Zaten varsayılan değerleri
  • Sen. Ini veya. Xml dosyasını ayrıştırmak
  • Bu yapılandırma dosyasında tanımlanan her değer ne sınıfında tanımlanan gelen varsayılan değeri geçersiz kılmak için kullanılır.


A solution a bit more complex, but maybe better, might be to :

  • Hala bu yapılandırma sınıf var, ama herhangi bir varsayılan değerlerini depolamak için kullanabilirsiniz değil
  • Bir tane var. Varsayılan değerleri saklamak için ini veya. Xml dosyası
  • Bir tane var. Ini veya. Xml dosyası olan insanların varsayılan birinde tanımlanan değerleri geçersiz kılabilirsiniz
  • Varsayılan değerleri içeren dosya yükleyin ve ardından özel olanları içeren bir

Bu çözeltinin avantajları şunlardır:

  • Bir PHP sınıfı kayıtlı hiçbir yapılandırma değeri
  • PHP sınıfı bakmak gitmek ve düşünmek gerek:.. Overriden tüm yapılandırma seçenekleri zaten insanlar sadece geçersiz kılmak için kendi özel dosyasına bir satır kopyalamak / yapıştırmak zorunda kalıyoruz ki, bir ini / xml dosyasında tanımlanır "nasıl bir yapılandırma dosyasına bu çevirmek?"


A couple more notes :

  • Her isteği dosyaları yeniden ayrıştırmak değil, önbelleğe alma-mekanizmasından çeşit kullanmak isteyebilirsiniz
  • Zend_Config and Zend_Config_Ini might be helpful ; even if you don't use those, as you are writing your own framework, you might want to take a look at what they do -- If I remember correctly, Zend_Config_Ini hiyerarşi ve kalıtım sağlar. Ini dosyaları

Eğlenin!

Bir default.ini ve ihtiyaç olarak o kadar override.ini-s: ben birkaç ini dosyaları kullanarak öneririm. Sonra sadece parse_ini_file() ile onlara yük ve array_merge() ile bir yapılandırma içine. Hızlı ve basit.

Bu soru cevaplar geniş bir yelpazede ile gelebilir. Benim kişisel recomendation SQLite'ta içine değerleri saklamak ve bu değerleri erişmek ve değiştirmek için ayrı bir komut dosyası var olacaktır. Diğer yol için okumaya devam edin.

Bu olmak istiyorum ve nasıl basitleştirilmiş sizin kullanıcılar için bir şeyler yapmak istiyorum nasıl nesne yönelimli bağlı olarak oldukça basittir. Sizin yüklemek talimatlar sadece bir dosyayı doğrudan düzenlemek kullanıcıları talimat verebilir. Bu durumda sadece doğrudan sabitleri bir dosyayı düzenlemek kullanıcıları talimat verebilir.

Bu rotayı takip uygulamaların çoğu detay explination ile uygulamak

<?php
/**
 * Global application configuration
 */
class AWConfig {

    /**
     * true or false
     * If the is set to true debug messages will be added to the application logs
     */
    public $DEBUG_MODE = true;
    /**
     * Path to Station database
     * ex (/homepages/26/3/htdocs/databases/stations.db)
     */
    public $DB_STATION = '/homepages/26/3/htdocs/databases/stations.db';
    /**
     * Path to logs database
     * ex (/homepages/26/3/htdocs/databases/stations.db)
     */
    public $DB_LOGS = '/homepages/26/d175338743/htdocs/weather/dev/metrics/beta2/databases/metriclogs.db';

    /**** DO NOT EDIT BELOW THIS LINE *****/
    public $LIST_STATION_LIMIT = 10;
    public $MAX_COMPARE = 6;
}
?>

Eğer ilk kurulum komut daha kullanıcı bu bilgileri gizlemek istiyorsanız ayrıntılar için kullanıcıya sorar ve bir dosyayı (config.php, config.ini, config.xml, ya da bir veritabanına) yazmak onlar seçti ayarları olacağını iyi olurdu . Sonra farklı bir komut gelecekte düzenlemek için. İyi örnek Joomla CMS olacaktır.

İşte ben kullanmak istiyorum tasarım deseni bulunuyor. Bunu kolaylaştırmak için basit bir sınıf oluşturmak istiyoruz:

class Configuration {
   String get($key) {...}
   String set($key, $value) {...}
}

İlk uygulama tüm varsayılan değerler ile kodlanmış olabilir. Daha sonra olsa da, bir sunucu ve / veya proje özel yapılandırma dosyası okuma kayma olabilir. Bu gerektiği gibi eklemek için size esneklik verecek.

(Ben de php.ini yapılandırmaları istediğiniz davranışı var gibi görünüyor, ama ben doğrudan bu sistemi kaldıraç nasıl görmüyorum fark ettim.)