Содержание
Zend_Config
разработан для упрощения использования
конфигурационных данных для веб-приложений. Он предоставляет основанный
на свойствах объектов интерфейс для чтения конфигурационных данных
из различных носителей данных, поддерживающих иерархическое хранение данных.
Сейчас Zend_Config
предоставляет вспомогательные классы
для конфигурационных данных, хранящихся в текстовых файлах:
Zend_Config_Array
,
Zend_Config_Ini
и
Zend_Config_Xml
.
Zend_Config
поддерживает единую модель наследования, которая
делает возможным наследование конфигурационных данных из одного раздела
в другой. Хотя Zend_Config
поддерживает наследование деревьев
произвольной глубины, раздел конфигурационных данных может наследовать
только из одного родительского раздела.
Внутри Zend_Config
реализует интерфейсы Countable и Iterator
для того, чтобы обеспечить легкий доступ к конфигурационным данным. Данные
сделаны доступными в Zend_Config
через ассоциативный массив,
который может быть многоуровневым. Вспомогательный класс, такой, как
Zend_Config_Ini
обычно предоставляет этот массив в
Zend_Config
, но интерфейс не требует следования этому
соглашению.
Замечание | |
---|---|
Хотя Zend_Config позволяет производить изменение
загруженных конфигурационных данных "в памяти", это не рассчитано для
сохранения конфигурационных данных на конкретный носиель данных.
Инструменты для создания и изменения конфигурационных данных для конкретных
носителей данных в настоящее время не входят в сферу Zend Framework.
Сторонние разработки с открытым кодом часто подходят в целях
создания и изменения конфигурационных данных для различных носителей данных.
|
Пример 3.1. Загрузка конфигурационных данных из файла INI
В данном примере конфигурационные данные для производственной среды
загружаются из файла INI с помощью
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')); ?>
Теперь конфигурационные данные доступны из свойств объекта $config
.
Предположим, что конфигурационные данные содержат параметры соединения с базой данных
и что эти данные хранятся в файле INI в следующем виде:
[production] database.type = pdo_mysql database.host = db.example.com database.username = dbuser database.password = secret database.name = dbname
Приложение может установить соединение с базой данных следующим образом:
<?php $myApplicationObject->databaseConnect($config->database->type, $config->database->host, $config->database->username, $config->database->password, $config->database->name); ?>
Как показано выше, конфигурационные данные доступны через синтаксис свойств объектов.
Мы также можем легко создать класс, наследующий от Zend_Config
для различных целей. Здесь приведен класс-наследник, добавляющий
публичный метод dump()
для быстрого вывода загруженных
конфигурационных данных.
<?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(); ?>
Для конфигурационных данных в приведенном выше примере, это должно вывести:
<pre> database => type => pdo_mysql host => db.example.com username => dbuser password => secret name => dbname </pre>