# Файл с настройками 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] );
?>

Правда прекрасно? Нет...

Решил как минимум вынести это всё в какие-то константы. Остаётся вопрос -- куда?

# Варианты:

  1. local/php_interface/init.php. В целом самый наверно примитивный способ. Но там может лежать какой-то функционал. Который может быть в репозитории и не очень бы хотелось, чтобы это попало куда-то в публичное поле.
  2. include.php какого-нибудь модуля. Такие же минусы, как и у первого пункта, но ещё и каждый раз подключать модуль, чтобы получить эти настройки.
  3. 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 можно почитать тут