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