Rozdział 3. Zend_Config
Poprzedni |  | Następny

## Rozdział 3. Zend_Config

## 3.1. Wprowadzenie

Klasa `Zend_Config` została stworzona aby uprościć użycie danych konfiguracyjnych dla aplikacji web. Dostarcza ona interfejs służący do odczytywania konfiguracji z różnych źródeł w których dane konfiguracyjne są przechowywane hierarchiczne. Obecnie `Zend_Config` dostarcza klasy obsługujące dane konfiguracyjne przechowywane w plikach tekstowych: `Zend_Config_Array`, `Zend_Config_Ini`, oraz `Zend_Config_Xml`.

`Zend_Config` wspiera model pojedynczego dziedziczenia, w którym jedna sekcja danych konfiguracyjnych może dziedziczyć z innej sekcji. Chociaż `Zend_Config` obsługuje drzewo o dowolnej strukturze, to sekcja danych konfiguracyjnych może dziedzieczyć tylko z jednej sekcji źródłowej.

Klasa `Zend_Config` implementuje interfejsy countable oraz iterator w celu zapewnienia łatwego dostępu do danych konfiguracyjnych. Dane są przekazywane do `Zend_Config` za pomocą tablicy asocjacyjnej, która może być wielowymiarowa. Klasa pomocnicza tak jak `Zend_Config_Ini` zasadniczo przekazuje taką tablicę do `Zend_Config`, ale interfejs nie wymaga używania tej konwencji.

| Notatka
Klasa `Zend_Config` pozwala na modyfikację załadowanych danych konfiguracyjnych w pamięci aplikacji, ale nie umożliwia zapisywania tych zmian do plików konfiguracyjnych. Narzędzia do tworzenia oraz modyfikowania danych konfiguracyjnych są obecnie poza polem działania Zend Framework. Oczywiście w celu tworzenia i modyfikowania danych konfiguracyjnych dostępne są rozwiązania w postaci innych aplikacji.

Przykład 3.1. Ładowanie danych konfiguracyjnych z pliku INI

W tym przykładzie dane konfiguracyjne aplikacji rozbudowywanej są ładowane z pliku INI za pomocą `Zend_Config_Ini`:

    <?php
    require_once 'Zend/Config.php';
    require_once 'Zend/Config/Ini.php';
    $config = new Zend_Config(Zend_Config_Ini::load('/path/to/config.ini', 'production'));
    ?>

Teraz dane konfiguracyjne są dostępne jako właściwości obiektu `$config`. Załóżmy, że dane konfiguracyjne zawierają parametry połączenia z bazą danych i umieszczone są one w pliku INI w takiej postaci:

    [production]
    database.type     = pdo_mysql
    database.host     = db.example.com
    database.username = dbuser
    database.password = secret
    database.name     = dbname

Aplikacja może utworzyć połączenie w taki sposób:

    <?php
    $myApplicationObject->databaseConnect($config->database->type,
                                          $config->database->host,
                                          $config->database->username,
                                          $config->database->password,
                                          $config->database->name);
    ?>

Jak pokazano wyżej, dane konfiguracyjne dostępne są jako właściwości obiektu.

Możemy także w prosty sposób rozwinąć klasę `Zend_Config`. W tym przypadku klasa pochodna definiuje metodę `dump()` umożliwiającą szybkie wyświetlenie załadowanych danych konfiguracyjnych:

    <?php
    class MyConfig extends Zend_Config
    {
        protected $_indent;

        public function dump()
        {
            $this->_indent = 0;
            echo "<pre>\n";
            $this->_dumpRecursor($this);
            echo "</pre>";
        }

        protected function _dumpRecursor($config)
        {
            foreach ($config as $key => $value) {
                echo str_repeat("    ", $this->_indent) . "$key =>";
                if ($value instanceof Zend_Config) {
                    echo "\n";
                    $this->_indent++;
                    $this->_dumpRecursor($value);
                    $this->_indent--;
                } else {
                    echo " $value\n";
                }
            }
        }
    }

    $config = new MyConfig(Zend_Config_Ini::load('/path/to/config.ini', 'production'));

    $config->dump();
    ?>

Dla danych z powyższego przykładu zostałoby wyświetlone:

    <pre>
    database =>
        type => pdo_mysql
        host => db.example.com
        username => dbuser
        password => secret
        name => dbname
    </pre>

Poprzedni |  | Następny
2.4. Zend_Cache backends | Spis treści | 3.2. Zend_Config_Array