Nasıl application.ini ile kurulum bir Zend_Application ve user.ini için

6 Cevap php

Ben Zend_Application kullanıyorum ve o benim application.ini içinde uygulama ve kullanıcı yapılandırma hem karıştırma am hakkı gelmiyor.

Bunu ne demek şudur. Örneğin, benim uygulama ad MyApp_ bazı kütüphane sınıfları gerekiyor. Yani application.ini ben [] = "MyApp_" autoloaderNamespaces koydu. Bu bir programcı dışında hiç kimse bu değiştirmek istiyorsunuz, saf uygulama yapılandırması olduğunu. Öte yandan ben, orada bir SysAdmin değiştirmek bir şey bir veritabanı yapılandırması koydu.

Benim fikrim ben user.ini almak tercih seçenekleri (yani application.ini standart değerleri tanımlamak) bir application.ini ve user.ini arasında seçenekleri, bölünmüş olduğunu ifade etti.

Bu iyi bir fikir mi? Nasıl en iyi ben bu uygulayabilirsiniz? Fikrin ben olan var

  • Birden fazla yapılandırma dosyalarını almak için Zend_Application genişletme
  • User.ini yüklenirken benim Bootstrap bir init işlevi yapma
  • Benim index.php yapılandırma dosyaları ayrıştırma ve Zend_Application bu geçiş (çirkin sesler)

Ben ne yapacağım? Ben gelecek için hazırlanan 'temiz' bir çözüm, (yeni ZF sürümleri ve aynı uygulama üzerinde çalışan diğer geliştiriciler) istiyorum

6 Cevap

Ben framework sürümü 1.10 ile yeni olabilir, bu soruna bir çözüm bulundu. Zend Uygulama nesnesini oluştururken, birlikte birleştirilmiş olsun seçenekler dizisinin 2. yapılandırma dosya yolları iletebilirsiniz:

$application = new Zend_Application(
    APPLICATION_ENV,
    array(
        'config' => array(
            APPLICATION_PATH . '/configs/application.ini',
            APPLICATION_PATH . '/configs/user.ini'
        ),
    )
);

Bunda yanlış bir şey yok, ben benzer bir şey yapmak. Ben ikinci seçenek kullanmanızı öneririz. Ben sadece Zend_Config_Ini kullanarak kullanıcı config yükleme önemser bir _initConfig () yöntemi var. Ben biraz fazla gibi görünüyor Zend_App, uzatmak olmaz.

Edit:

Yorumlarınız yanıt olarak, sadece yapardın:

$this->bootstrap('config');

Böylece, yapılandırma DB önce yüklenen sağlamak için, gibi bir şey olurdu:

protected function _initConfig()
{
    $config = new Zend_Config_Ini('/path/to/user.ini');
    return $config;
}

protected function _initDb()
{
    $this->bootstrap('config');
    $config = $this->getResource('Config');

    /* ... */
}

Bir Bootstrap _init yöntemi tarafından döndürülen bir şey olarak Zend_Registry kullanmaya gerek ulaşılabilir getResource kullanılarak () var olduğunu

istediğiniz kadar bu kadar inis birleştirme olacak biliyor musun?

application.ini içinde

[production]
config[] = APPLICATION_PATH "/configs/dsn.ini"
config[] = APPLICATION_PATH "/configs/error.ini"
...

Bir yapılandırma dosyası başka bir config dosyasına atıfta öğeyi, 'config' olabilir. Zend_Application bu yapılandırma dosyasını içerecektir. Dahil config-file tercih var ve zaten standart config-dosyasında tanımlanan anahtarları üzerine yazacaktır.

Dün de Zend Framework mailing list bir konu orada başladı

Examples

application.ini:

[production]
config = APPLICATION_PATH "/configs/config.ini"
resources.db.adapter = "Mysqli"
resources.db.host = "localhost"

config.ini:

[production]
resources.db.host = "mysql.server.com"
resources.db.username = "myuser"

public / index.php:

$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);

Benzer bir senaryoda, ben uygulamayı başlatmasını uygulama belirli parametreler programlı sağlanabilir gördüm. Bu Config.ini içinde yapılandırma ile ilgili parametreleri yerleştirmek için yardımcı

Aslında bu şekilde yaptım:

Uygulamayı bootstap için index.php iç

     $application = new Zend_Application(APPLICATION_ENV, array(
                'resources' => array(
                   'FrontController' => array(
                       'controllerDirectory' => APPLICATION_PATH . '/main/controllers',
                    ),
                'layout' => array(
                    'layoutpath' => APPLICATION_PATH . "/layouts/scripts"
                    ),
                ),
            ));

and then bootstrap içinde parse the config.ini inidependently

    protected function _initConfigFile() {
        try {
            $configuration = new Zend_Config_Ini(
                APPLICATION_PATH . '/config/app.ini',
                APPLICATION_ENV );
            $registry->configuration = $configuration;
        } catch (Zend_Exception $zExp) {
            echo "Could not read application ini file (app.ini). "
                . " Please check that it exists and has the appropriate structure.\n";
            echo("\n");
            var_dump($zExp);
            exit(1);
        }
    }

bootstrap içinde

: Bir _initConfig () bootstrap yöntemi gibi bir şey (config nesnesi gerektirir) diğer önyükleme yöntemleri belirterek diğerlerinden önce çağrılır sağlayabilirsiniz

$this->bootstrap('config');

Daha tam bir örnek (bir Bootstrap sınıfın bağlam):

protected function _initConfig() {
    $config = new Zend_Config_Ini('[filename]');
    Zend_Registry::set('config',$config);
}

protected function _initSomething() {
    $this->bootstrap('config');
    $config = Zend_Registry::get('config');
    // you can now do whatever you like with the $config object
}

Güncelleme:

Şimdi diğer yanıtlar belirtildiği gibi yapılandırma sadece bootstrap içinde gerekiyorsa, ben $this->getResource('Config') yöntemi kullanmak söyleyebilirim. Yapılandırma benim uygulama diğer bölgelerinde rahatlıkla ulaşılabilir böylece ben kayıt defteri kullanın.