Rozdział 3. Zend_Config

Spis treści

3.1. Wprowadzenie
3.2. Zend_Config_Array
3.2.1. Wprowadzenie
3.3. Zend_Config_Ini
3.3.1. Wprowadzenie
3.4. Zend_Config_Xml
3.4.1. Wprowadzenie

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] 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>