Hoofdstuk 3. Zend_Config

Inhoudsopgave

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

3.1. Inleiding

Zend_Config is ontworpen om het gebruikl van configuratiedata te vereenvoudigen voor webtoepassingen. Het verstrekt een eigenschap-gebaseerde interface voor het lezen van configuratiedata vanuit een panel van verschillende bronnen die data hiërarchisch kunnen opslaan. Momenteel verstrekt Zend_Config hulpklassen voor configuratiedata die in tekstbestanden werd opgeslaan via Zend_Config_Array, Zend_Config_Ini, and Zend_Config_Xml.

Zend_Config ondersteunt één enkel erfenismodel. Dit model laat toe dat configuratiedata van een configuratiesectie in een andere configuratiesectie kan worden overgeërfd. Hoewel Zend_Config erfenistakken van eender welke diepte ondersteunt, kan een configuratiesectie slechts van één enkele parent sectie erven.

Intern implementeert Zend_Config de Countable en Iterator interfaces om de toegang tot configuratiedata te vergemakkelijken. De data wordt aan Zend_Config doorgegeven via een associatieve array, dewelke multidimensioneel kan zijn. Een typische hulpklasse zoals Zend_Config_Ini geeft deze array door aan Zend_Config, maar de interface legt je deze manier van werken niet op.

[Opmerking] Opmerking
Alhoewel Zend_Config toelaat om configuratiedata in-memory te wijzigen, is het niet ontworpen om het opslaan van de configuratiedata naar een specifieke media te vereenvoudigen. Werktuigen voor het aanmaken en wijzigen van configuratiedata naar een specifieke media zijn momenteel niet voorzien in de Zend Framework. Meestal zijn er third-party open source oplossingen voorhanden die voorbestemd zijn om configuratiedata voor verscheidene opslag media's aan te maken of te wijzigen.

Voorbeeld 3.1. Configuratiedata van een INI Bestand Inladen

In dit voorbeeld gebruiken we Zend_Config_Ini om configuratiedata voor een produktie environment in te laden vanuit een INI bestand:

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

Nu is de configuratiedata voorhanden vanaf de eigenschappen van het object $config. Veronderstel dat de configuratiedata database verbindingsparameters inhoud en dat de data in het INI bestand is opgeslaan als volgt:

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

De toepassing zou dan een databaseverbinding tot stand kunnen brengen met:

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

Zoals hierboven beschreven kan de configuratiedata aangesproken worden met de object eigenschappen syntax.

We kunnen ook gemakkelijk Zend_Config aanpassen voor verschillende doeleinden. Hier verstrekt een uitbreidende klasse een publieke dump() methode om snel configuratiedata die is opgeslaan af te beelden:

<?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('/pad/naar/config.ini', 'productie'));

$config->dump();
?>   

Voor de configuratiedata in het voorbeeld hierboven zou dit het volgende afbeelden:

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