Конфигурационные данные

Для управления конфигурационными данными, а также хранения переменных окружения и других данных в Чероки имеется компонент 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'
}
}