Spis treści
Klasa Zend_Config została stworzona aby uprościć użycie danych
konfiguracyjnych dla aplikacji web. Dostarcza ona interfejs służący do odczytywania
konfiguracji z różnych źródeł w których dane konfiguracyjne są przechowywane
hierarchiczne. Obecnie Zend_Config dostarcza klasy obsługujące
dane konfiguracyjne przechowywane w plikach tekstowych:
Zend_Config_Array,
Zend_Config_Ini, oraz
Zend_Config_Xml.
Zend_Config wspiera model pojedynczego dziedziczenia, w którym
jedna sekcja danych konfiguracyjnych może dziedziczyć z innej sekcji.
Chociaż Zend_Config obsługuje drzewo o dowolnej strukturze, to
sekcja danych konfiguracyjnych może dziedzieczyć tylko z jednej sekcji źródłowej.
Klasa Zend_Config implementuje interfejsy countable oraz iterator
w celu zapewnienia łatwego dostępu do danych konfiguracyjnych. Dane są przekazywane
do Zend_Config za pomocą tablicy asocjacyjnej, która może być
wielowymiarowa. Klasa pomocnicza tak jak Zend_Config_Ini zasadniczo
przekazuje taką tablicę do Zend_Config, ale interfejs nie wymaga
używania tej konwencji.
![]() |
Notatka |
|---|---|
Klasa Zend_Config pozwala na modyfikację załadowanych danych konfiguracyjnych w pamięci
aplikacji, ale nie umożliwia zapisywania tych zmian do plików konfiguracyjnych. Narzędzia do tworzenia
oraz modyfikowania danych konfiguracyjnych są obecnie poza polem działania Zend Framework. Oczywiście
w celu tworzenia i modyfikowania danych konfiguracyjnych dostępne są rozwiązania w postaci innych
aplikacji.
|
Przykład 3.1. Ładowanie danych konfiguracyjnych z pliku INI
W tym przykładzie dane konfiguracyjne aplikacji rozbudowywanej są ładowane z pliku
INI za pomocą 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'));
?>
Teraz dane konfiguracyjne są dostępne jako właściwości obiektu $config.
Załóżmy, że dane konfiguracyjne zawierają parametry połączenia z bazą danych
i umieszczone są one w pliku INI w takiej postaci:
[production]
database.type = pdo_mysql
database.host = db.example.com
database.username = dbuser
database.password = secret
database.name = dbname
Aplikacja może utworzyć połączenie w taki sposób:
<?php
$myApplicationObject->databaseConnect($config->database->type,
$config->database->host,
$config->database->username,
$config->database->password,
$config->database->name);
?>
Jak pokazano wyżej, dane konfiguracyjne dostępne są jako właściwości obiektu.
Możemy także w prosty sposób rozwinąć klasę Zend_Config. W tym
przypadku klasa pochodna definiuje metodę dump() umożliwiającą
szybkie wyświetlenie załadowanych danych konfiguracyjnych:
<?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();
?>
Dla danych z powyższego przykładu zostałoby wyświetlone:
<pre>
database =>
type => pdo_mysql
host => db.example.com
username => dbuser
password => secret
name => dbname
</pre>