# Файл с настройками bitrix проектов
Так получилось, что достался проект на доработку в котором всё плохо с кодом. Как обычно с bitrix проектами.
Задача была обратиться к 1с используя SOAP протокол. Получить какие-то данные в json и дальше уже работать с ними. Доступы же к 1с (url, логин, пароль) хранились в переменных рядом с кодом обращения к 1С.
Ну, "круто" конечно...
<?php
$sURL = '***';
$sLogin = '***';
$sPassword = '***';
$oSoapClient = new \SoapClient($sURL, array(
'login' => $sLogin,
'password' => $sPassword
));
$aResult = $oSoapClient->method( ['json' => $mRequestData] );
?>
Правда прекрасно? Нет...
Решил как минимум вынести это всё в какие-то константы. Остаётся вопрос -- куда?
# Варианты:
- local/php_interface/init.php. В целом самый наверно примитивный способ. Но там может лежать какой-то функционал. Который может быть в репозитории и не очень бы хотелось, чтобы это попало куда-то в публичное поле.
- include.php какого-нибудь модуля. Такие же минусы, как и у первого пункта, но ещё и каждый раз подключать модуль, чтобы получить эти настройки.
- bitrix/.settings.php. Уже неплохо, там находятся и настройки для базы данных. Но не хотелось бы мешать базовые настройки и свои дополнительные.
Я остановился на варианте файла bitrix/.settings_extra.php. По формату он похож на .settings.php, но там он лежит отдельно, но API для доступа к настройкам такой же. Так же этот файл можно положить в корень какого-то модуля своего, что тоже удобно, если нужно хранить настройки для модуля, а не задавать их через глобальные константы.
# Пример файла bitrix/.settings_extra.php
<?php
return [
'1C' => [
'value' => [
'login' => '***',
'password' => '***',
'url' => '***'
]
]
];
Как видите это обычный массив массивов. Только значение настройки надо всегда хранить по ключу 'value'.
Вызов по API достаточно простой.
$config1C = \Bitrix\Main\Config\Configuration::getValue('1C');
И на выходе мы получаем наш массив с настройками.
Если файл .settings_extra.php лежит в корне модуля, то нужно сделать так.
$configInstance = Configuration::getInstance('module.id');
$configInstance->get('setting');
Вместо module.id конечно же ваш модуль, вместо setting название вашей настройки.
Один минус, что нельзя этот файл положить в папку local, т.к. ядро bitrix не умеет его оттуда забирать.
Более подробно о файле .settings.php можно почитать тут