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>