Модули
Настройки локального модуля
Option::get и Option::set с проверкой доступа, CSRF и типа значения.
Чтение настройки
<?php
use Bitrix\Main\Config\Option;
$is_enabled = Option::get('test.example', 'is_enabled', 'N') === 'Y';
$batch_limit = max(1, min(1000, (int) Option::get('test.example', 'batch_limit', '100')));Значения Option — строки. Явно задавайте значение по умолчанию и диапазон числовой настройки. Секреты и произвольные пути к файлам не нужны для такого примера.
options.php модуля
Файл включается штатной административной страницей настроек. Это пример для администратора портала. Если модулю нужна отдельная роль настройки, вместо IsAdmin реализуется проверка этой роли.
<?php
use Bitrix\Main\Config\Option;
use Bitrix\Main\Context;
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) {
die();
}
global $USER;
if (!$USER || !$USER->IsAdmin()) {
http_response_code(403);
return;
}
$request = Context::getCurrent()->getRequest();
$error_text = '';
if ($request->isPost() && $request->getPost('save_options') === 'Y') {
if (!check_bitrix_sessid()) {
$error_text = 'Сессия истекла. Обновите страницу.';
} else {
$limit_text = $request->getPost('batch_limit');
if (!is_string($limit_text) || !preg_match('/^[1-9][0-9]{0,3}$/D', $limit_text)
|| (int) $limit_text > 1000
) {
$error_text = 'Размер порции должен быть от 1 до 1000.';
} else {
Option::set('test.example', 'is_enabled', $request->getPost('is_enabled') === 'Y' ? 'Y' : 'N');
Option::set('test.example', 'batch_limit', $limit_text);
}
}
}
?>
<p><?= htmlspecialcharsbx($error_text) ?></p>
<form method="post">
<?= bitrix_sessid_post() ?>
<input type="hidden" name="save_options" value="Y">
<label><input type="checkbox" name="is_enabled" value="Y"
<?= Option::get('test.example', 'is_enabled', 'N') === 'Y' ? 'checked' : '' ?>> Включено</label>
<label>Размер порции <input name="batch_limit" type="number" min="1" max="1000"
value="<?= htmlspecialcharsbx(Option::get('test.example', 'batch_limit', '100')) ?>"></label>
<button type="submit">Сохранить</button>
</form>CSRF-токен подтверждает сессию отправителя, но не его полномочия. Поэтому проверка администратора выполняется до сохранения, а не заменяется проверкой sessid.