Конфигурационные данные
Для управления конфигурационными данными, а также хранения переменных окружения и других данных в Чероки имеется компонент Conf. Данный класс создается в единственном экземпляре при инициализации фреймворка. Объект можно получить вызовом метода: Framework::get_object('Conf'). Класс обладает следующими методами:
- Парсинг и загрузка конфигурационного файла (parse, load)
- Присваивание и получение значений (set, get, has)
Парсинг и загрузка конфигурационного файла
Конфигурационные файлы в Ирокезе имею INI-формат. Немного подробнее ознакомиться с форматом можно из следующих источников:
В Чероки INI файлы имеют дополнительную функциональность - использование переменных.
Пример из файла path.ini:
[PTH]
main = "{$GLOBALS['PTH']['main']}" ; подставляем глобальную переменную из php-кода
; include files
include = "{$main}include/" ; подставляем значение main из предыдущей переменной
Чтобы распарсить файл, и получить его значения в виде ассоциативного массива, используется метод Conf::parse():
- array Conf::parse(string $file [, bool $as_lang]) - распарсить файл $file и выдать как ассоциативный массив
// Пример 1
/*
файл eg.ini:
[one]
mon = Monday
jan = January
[two]
tue = Tuesday
feb = February
*/
$ini = Conf::parse('eg.ini');
print_r($ini);
// вывод:
array(
'one' => array(
'mon' => 'Monday'
'jan' => 'January'
),
'two' => array(
'tue' => 'Tuesday'
'feb' => 'February'
)
)
Если установлен флаг $as_lang = true, тогда значение переменной будет доступно в разных регистрах. По умолчанию флаг имеет значение false.
// Пример 2
/*
файл lang.ini:
content management system = система управления содержанием
*/
$lang = Conf::parse('lang.ini');
print_r($lang);
// вывод:
array(
'content management system' => 'система управления содержанием',
'Content management system' => 'Система управления содержанием',
'Content Management System' => 'Система Управления Содержанием',
'CONTENT MANAGEMENT SYSTEM' => 'СИСТЕМА УПРАВЛЕНИЯ СОДЕРЖАНИЕМ',
)
Для того, чтобы данные из файла сохранить в объекте, применяется метод Conf::load
- bool Conf::load(string $file [, string $section [, bool $as_lang]])
При вызове метода объект Conf загружает данные из файла. Если указана секция $section, то данные сохраняются в этом разделе.
Присваивание и получение значений
После того, как значения загружены из файла, их можно получить через объект Conf по имени переменной.
// Продолжение примера 1
echo $Conf->one->mon; // 'Monday'
echo $Conf->two->feb; // 'February'
Наличие переменной можно проверить при помощи метода Conf::has(string $name)
// Продолжение примера 1
if ($Conf->has('three')) {
echo $Conf->three;
} else {
echo 'Error';
}
// Результат: 'Error'
Также переменные можно присвоить через метод Conf::set(string $name, mixed $value)
// Пример 3
$Conf->set('three', array('wed' => 'Wednesday', 'mar' => 'March'));
echo $Conf->three->mar; // 'March'
А также проще: по имени:
// Продолжение примера 3
$Conf->four = array('thu' => 'Thursday', 'apr' => 'April');
echo $Conf->four->apr; // 'April'
При хранении значения переменных конвертируются в объект ArrayRecursiveObject (implements Iterator), который имеет те же методы: get, set, has.
// Продолжение примера 3
if ($Conf->has('four')) {
if ($Conf->four->has('apr')) {
echo $Conf->four->apr; // 'April'
}
}