Kapitel 3. Zend_Config

Inhaltsverzeichnis

3.1. Einführung
3.2. Zend_Config_Array
3.2.1. Einführung
3.3. Zend_Config_Ini
3.3.1. Einführung
3.4. Zend_Config_Xml
3.4.1. Einführung

3.1. Einführung

Zend_Config wurde designt um die Nutzung von Konfigurationsdaten in Webanwendungen zu vereinfachen. Es beinhaltet ein eigenschaftsbasiertes Interface zum Lesen von Konfigurationsdaten aus einer Vielzahl von Formaten mit Unterstützung für hierarchische Datenstrukturen. Aktuell bietet Zend_Config Hilfsklassen für Konfigurationsdaten, in Form von Textdateien mittels Zend_Config_Array, Zend_Config_Ini und Zend_Config_Xml an.

Zend_Config unterstützt ein Einzelvererbungsmodell welches es ermöglicht, Konfigurationsdaten von einem Abschnitt der Konfigurationsdatei in einen anderen Abschnitt zu vererben. Obwohl Zend_Config eine beliebige Vererbungstiefe unterstützt, können Abschnitte von Konfigurationsdaten nur von einem Elternabschnitt erben.

Intern implementiert Zend_Config das Countable und das Iterator Interface um einen einfachen Zugriff auf die Konfigurationsdaten zu ermöglichen. Die Daten werden Zend_Config in Form eines assoziativen, mehrdimensionalen Array zur Verfügung gestellt. Typischerweise wird Zend_Config mittels Hilfsklassen wie Zend_Config_Ini mit einem solchen Array versorgt, wobei die Nutzung dieser Konvention nicht zwangsweise durch das Interface vorgeschrieben wird.

[Anmerkung] Anmerkung
Obwohl Zend_Config die Änderung von geladenen Konfigurationsdaten im Speicher erlaubt, ist es nicht dafür ausgelegt, um Konfigurationsdaten in bestimmten Formaten zu speichern. Tools für die Erstellung und Änderung von Konfigurationsdaten in bestimmten Formaten befinden sich zur Zeit ausserhalb des Rahmens des Zend Framework. Oftmals sind aber Open Source Lösungen von Drittanbietern für die Erstellung und Änderung von Konfigurationsdaten in verschiedenen Formaten verfügbar.

Beispiel 3.1. Laden von Konfigurationsdaten aus einer INI-Datei

In diesem Beispiel werden Konfigurationsdaten für eine Produktionsumgebung mittels Zend_Config_Ini aus einer INI-Datei geladen:

<?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'));
?>       

Nun sind die Konfigurationsdaten in Form von Eigenschaften des $config Objektes verfügbar. Angenommen, die Konfigurationsdaten beinhalten Parameter für eine Datenbankverbindung welche in einer INI-Datei wiefolgt gespeichert wurden:

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

Die Anwendung könnte nun damit eine Verbindung zur Datenbank realisieren:

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

Wie oben gezeigt, sind die Konfigurationsdaten mit Hilfe der Syntax für Objekteigenschaften abrufbar.

Wir können Zend_Config auch sehr einfach für die vielfältigsten Zwecke erweitern. Hier stellt eine ableitende Klasse die öffentliche Methode dump() zum schnellen Ausgeben von geladenen Konfigurationsdaten zur Verfügung:

<?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();
?>   

Für die Konfigurationsdaten im obigen Beispiel würde Folgendes ausgegeben werden:

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