Bir dosyasına karmaşık yapılandırma ısrarcı (PHP)

4 Cevap php

Ben yapılandırması için birkaç yüz satırı XML dosyasını kullanan oldukça büyük bir MVC PHP web uygulaması (özel, hiçbir framework) var. Config veri, çok zarif XML temsil ama çok kolay okuyamıyor veya DOM kullanarak yazılmış oldukça karmaşık bir yapıya sahiptir. Yapılandırma Tüm veri okuma ve yazma yapılandırma her veri türü için erişim yöntemlerinin olan bir yapılandırma sınıfı geçer. Her XML düğümü farklı olduğundan, yöntemlerin çoğu kendi özel kod kullanabilirsiniz. Bu sınıf şu anda yaklaşık 2000 satırlık uzun ve ben bunu sevmiyorum. Bir veritabanı mevcut değildir.

Belki yapılandırma veri devam için daha iyi bir yolu, bazı yapılandırma sınıfları oluşturmak ve bir dosyaya nesne serileştirme kullanmak olacağını bana oluştu.

Karmaşık yapılandırma veri işleme için bazı en iyi uygulamaları nelerdir?

4 Cevap

Eğer kabul mü SQLite?

Bu aslında bir dosya hafif bağımsız veritabanı. Veritabanı, yerel olarak veya uzaktan kullanılabilir. Eğer bir dosya için yapılandırma devam edebiliyoruz eğer o da bir SQLite veritabanına devam etmek mümkün olmalıdır.

Serileştirme için başka bir seçenek olarak JSON düşünebilirsiniz. Bu teorik olarak hala insan okunabilir ve erişim kodu biraz daha basit hale getirebileceğini nihai temsil gibi daha "Nesne" olmanın yararı vardır. Ve diğer yararı işlem için istemci tarafında modelin tamamını veya bir kısmını devam olmasıdır. Ama o zaman ya da ne isterseniz olmayabilir hangi app içine bazı javascript tanıtmak zorundayız.

INI dosyaları Ben örnek yapılandırma bakmak, Zend Framework mağaza yapılandırmaya kullanmak yoludur:

http://www.framework.zend.com/manual/en/zend.config.adapters.ini.html

; Production site configuration data
[production]
webhost                  = www.example.com
database.adapter         = pdo_mysql
database.params.host     = db.example.com
database.params.username = dbuser
database.params.password = secret
database.params.dbname   = dbname

; Staging site configuration data inherits from production and
; overrides values as necessary
[staging : production]
database.params.host     = dev.example.com
database.params.username = devuser
database.params.password = devsecret

Yapılandırmasını Okuma:

$config = new Zend_Config_Ini('/path/to/config.ini', 'staging');

echo $config->database->params->host;   // prints "dev.example.com"
echo $config->database->params->dbname; // prints "dbname"

Yapılandırmasını Yazma:

// Load all sections from an existing config file, while skipping the extends.
$config = new Zend_Config_Ini('config.ini',
                              null,
                              array('skipExtends'        => true,
                                    'allowModifications' => true));

// Modify a value
$config->production->hostname = 'foobar';

// Write the config file
$writer = new Zend_Config_Writer_Ini(array('config'   => $config,
                                           'filename' => 'config.ini'));
$writer->write();

Yapılandırma Her düğüm karmaşık dizi yapılandırma sınıfı örneği oluşturmak ve bunu dosyaya kaydetmek için kullanılabilir yanı sıra, diziye dönüştürülebilir.

Bu yapılandırma türü, gerçekten okunabilir insan ve düzenlenebilir.

Belki bazı benzer çözümü oluşturmak için çalışmalısınız.

Ben gerçekten bir hayranı değilim, ama XML yapılandırma upsides biri de en azından teorik el-düzenlenebilir olmasıdır. O el-düzenlenebilir gerçek bir streç olacağını çağıran bir karmaşıklık bir tefrika PHP nesne ile; sadece biraz daha az zor ve hata eğilimli bir onaltılık editörü kullanarak bir ikili yürütülebilir dizeleri değiştirerek daha bulunuyor.

Eğer arayüz dışında dosya düzenleme yapılandırma için dost olmak istiyorsanız, PHP nesne serileştirme gitmek için yol değildir. O umurumda değil, olsa, muhtemelen oldukça iyi çalışacağız.

Bu değer ne için, ben şiddetle XML düğümleri için özel kod büyük ölçüde çarpanlarına ve jeneralize olabilir şüpheli olur.

Eğer yapılandırma yapısının düzeni istiyorsanız, ben size yapılandırma işleyicisi için mevcut kod tabanı üstlenmeden daha iyi olacağını düşünüyorum. Eğer serileştirme bir kazanç daha almak için gidiyoruz eğer ben bilmiyorum. Eğer bir şey, ben bu durumda yapı değişiklikleri hata ayıklamak biraz zor olacağını düşünüyorum.