Hoofdstuk 3. Zend_Config
Terug |  | Volgende

## Hoofdstuk 3. Zend_Config

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

Terug |  | Volgende
2.4. Zend_Cache backends | Begin | 3.2. Zend_Config_Array