Управление конфигурацией приложения через Configuration
Проблема
Разработчики часто хранят конфигурационные параметры приложения в собственных файлах или таблицах БД. При этом в ядре 1С-Битрикс существует готовый механизм Bitrix\Main\Config\Configuration, который предоставляет единообразный интерфейс для работы с настройками через файлы .settings.php.
Решение
Класс Configuration работает с файлом .settings.php в директории /bitrix/ и поддерживает дополнительный файл .settings_extra.php для переопределения значений. Это позволяет разделять конфигурацию для разных окружений.
Чтение настроек
use Bitrix\Main\Config\Configuration;
// Получение значения через статический метод
$cacheSettings = Configuration::getValue('cache_flags');
// Получение через экземпляр с доступом как к массиву
$config = Configuration::getInstance();
$connections = $config['connections'];
$defaultConnection = $connections['value']['default']['host'] ?? null;
Запись настроек
use Bitrix\Main\Config\Configuration;
// Простая установка значения
Configuration::setValue('my_app_settings', [
'api_endpoint' => 'https://api.example.com',
'timeout' => 30,
'debug' => false,
]);
// Через экземпляр с контролем readonly
$config = Configuration::getInstance();
$config->add('feature_flags', [
'new_catalog' => true,
'beta_checkout' => false,
]);
$config->saveConfiguration();
Настройки модулей
Каждый модуль может иметь собственный файл .settings.php. Доступ к ним осуществляется через передачу ID модуля:
use Bitrix\Main\Config\Configuration;
// Чтение конфигурации модуля iblock
$iblockConfig = Configuration::getInstance('iblock');
$apiSettings = $iblockConfig->get('api');
// Итерация по всем настройкам модуля
$moduleConfig = Configuration::getInstance('sale');
foreach ($moduleConfig as $key => $value) {
// Обработка каждого параметра
}
Защита от перезаписи
Параметры можно защитить флагом readonly:
// В файле .settings.php
return [
'license' => [
'value' => 'XXXX-XXXX-XXXX',
'readonly' => true, // Нельзя изменить через Configuration::setValue
],
'debug' => [
'value' => true,
'readonly' => false,
],
];
Разделение окружений
Файл .settings_extra.php автоматически мержится с основным. Это удобно для переопределения настроек на dev/prod:
// .settings_extra.php (не коммитится в репозиторий)
return [
'connections' => [
'value' => [
'default' => [
'host' => 'localhost',
'database' => 'dev_db',
],
],
],
];
Итог
Класс Configuration предоставляет типизированный доступ к настройкам приложения с поддержкой защиты от изменений и разделения окружений. Используйте его вместо собственных решений для централизованного управления конфигурацией.