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 den Gebrauch von Konfigurationsdaten für Web Anwendungen zu vereinfachen. Es bietet ein Eigenschafts-basiertes Interface für das Lesen von Konfigurationsdaten von einer Vielzahl von Medien welche hierarchische Datenspeicherung unterstützen. Aktuell bietet Zend_Config Helfer Klassen für Konfigurationsdaten welche in Text Dateien gespeichert sind via Zend_Config_Array, Zend_Config_Ini, und Zend_Config_Xml.

Zend_Config unterstützt ein einzelnes vererbungs Modell welches es ermöglicht, Konfigurations Daten von einem Abschnitt der Konfigurations Daten in einen anderen zu vererben. Obwohl Zend_Config Vererbungs Bäume beliebiger Höhe unterstützt, können Abschnitte von Konfigurations Daten nur von einem Eltern Abschnitt vererbt werden.

Intern implementiert Zend_Config das Countable und das Iterator Interface um den einfachen Zugriff auf Konfigurations Daten abzubilden. Die Daten werden Zend_Config verfügbar gemacht, durch ein assoziatives Array, welches Mehrdimensional sein kann. Eine Helfer Klasse wie Zend_Config_Ini liefert dieses Array typischerweise an Zend_Config, aber das Interface muß sich nicht Zwingenderweise an diese Konvention halten.

[Anmerkung] Anmerkung
Obwohl Zend_Config die Änderung im-Speicher von geladenen Konfigurations Daten erlaubt, ist es nicht dafür ausgelegt, um Konfigurations Daten in bestimmten Speicher Medien zu speichern. Tools für das Erstellen und Ändern von Konfigurations Daten in bestimmten Speicher Medien sind aktuell ausserhalb des Zend Framework Rahmens. Third-Party Open Source Lösungen sind oft erhältlich, für den Zweck der Erstellung und Änderung von Konfigurations Daten für verschiedenste Speicher Medien.

Beispiel 3.1. Laden von Konfigurations Daten von einer INI Datei

In dieser Bespiel werden Konfigurations Daten für eine Produktionsumgebung von einer INI Datei geladen, durch Benutzung von 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'));
?>       

Nun sind die Konfigurations Daten abrufbar durch die Objekt Eigenschaften von $config. Angenommen die Konfigurations Daten beinhalten Datenbank Verbindungs Parameter und die Daten werden in der INI Datei wie folgt gespeichert :

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

Die Anwendung könnte eine Verbindung zur Datenbank wie folgt realisieren:

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

Wie oben gezeigt, sind die Konfigurations Daten mit Hilfe der Objekt Eigenschafts Syntax abrufbar.

Wie können also Zend_Config sehr einfach für die vielfältigsten Zwecke erweitern. Hier stellt eine Erweiterungsklasse die öfentliche Methode dump() zur Verfügung, für das schnelle Ausdrucken von geladenen Konfigurations Daten:

<?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 Konfigurations Daten im obigen Beispiel würde folgendes gedruckt werden:

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