<small>Предыдущие статьи:

- ➡️ [Раздел 06. Архитектура](/docs/06-architecture)
- ➡️ [Раздел 07. Автолоадер](/docs/07-autoloader)
- ➡️ [Раздел 08. Соглашение о хранилище данных](/docs/08-database)
</small>
# SLOT-H: Параметризация

В системе используется трехуровневая параметризация, позволяющая гибко управлять настройками проекта без изменения кода.

---

## Первый уровень - глобальная конфигурация

Файл `Config/config.php` содержит базовые настройки, общие для всех проектов.

В этом файле определяются:

- Пути к папкам хранения файлов (`Storage`, `Images`, `Logs`, `Dump`)
- Глобальные параметры (`ROOT`, `DEBUG`, `SHOW_QUERIES`)
- Настройки безопасности (`IGNORE_SIGN`, `CRYPTO_PROTOCOL`)
- Параметры производительности (`AUTOLOAD_MODE`, `memory_limit`)

Эти настройки являются фундаментом - догматом, который не переопределяется, но может быть дополнен на следующих уровнях.

---

## Второй уровень - конфигурация проекта

Каждый проект имеет свой ini-файл в папке `Config/Domens`.

Имя файла соответствует адресу сайта (`myproject.com.ini`, `127.0.0.1.ini`).

В этом файле настраиваются:

- Подключение к базам данных (`db_host`, `db_name`, `db_login`, `db_password`, `db_engine`)
- Базовые параметры проекта (`default_module`, `default_controller`, `default_action`)
- Язык и валюта по умолчанию
- Основные модули и контроллеры

Эти настройки являются аксиомой для конкретного проекта - они дополняют глобальную конфигурацию и задают поведение проекта в целом.

---

## Третий уровень - динамические константы

Таблица `constants` в базе данных хранит параметры, которые можно изменять через интерфейс администратора без перезагрузки сервера.

В этой таблице хранятся:

- Настройки безопасности (`auth_timeout`, `max_attempt_allow`, `session_lifetime`)
- Параметры паролей (`min_password_length`, `password_has_uppercase`, `password_has_lowercase`)
- Системные параметры (`role_superadmin`, `online_timeout`)

Эти параметры кастомизируют поведение сайтов, позволяя донастраивать их под конкретные задачи. Константы могут быть как для конкретного проекта (поле `project_id` заполнено), так и для всех проектов сразу (поле `project_id = NULL`).

Это правило - финальная настройка, которая определяет конкретное значение параметра в данный момент времени.

---

## Взаимодействие уровней

Уровни не пересекаются и не переопределяют друг друга. Они дополняют друг друга как:

- **Догмат** - глобальная конфигурация задаёт базовые принципы работы системы
- **Аксиома** - конфигурация проекта уточняет их для конкретного сайта
- **Правило** - динамические константы определяют финальные значения параметров для конкретной ситуации

Каждый уровень отвечает за свою зону ответственности и не вмешивается в зону другого уровня.

---

## Где что хранить

- В `config.php` - настройки, которые не должны меняться между проектами и не требуют частого изменения
- В ini-файлах - настройки, которые различаются между проектами
- В таблице `constants` - настройки, которые должны меняться через интерфейс администратора без доступа к серверу

Это разделение позволяет управлять проектом на разных уровнях: от глобальных настроек всей системы до точечных параметров конкретного сайта.

---

## Что дальше?

- ➡️ [Раздел 10. Мультипроектность](/docs/10-multiproject)
- ➡️ [Раздел 11. Модуль Base](/docs/11-module-base)
- ➡️ [Раздел 12. Модуль Free](/docs/12-module-free)
