Конфигурация ядра

Документ описывает, где хранятся конфигурации, что задаётся через .env, что через PHP-конфиги, а что зашито в коде. Понимание этого критично для деплоя и отладки.


1. Типы конфигурации

ГдеПримерМожно менять без вмешательства в код?
.envDB_DSN, REDIS_HOST✅ Да
config/*.phpconfig/web.php, config/db.php✅ Да (PHP-файлы)
modules/*/config/params.phpmodules/rbac/config/params.php✅ Да (для модулей)
PHP-константы / аргументы конструктораpageSizeLimit = [1, 1000]❌ Нет, в коде ядра/модулей
ENV-дефолты в params.php$_ENV['OAUTH2_ACCESS_TOKEN_TTL'] ?? 3600✅ Частично (можно через .env)

2. Переменные окружения (.env)

Файл .env (загружается vlucas/phpdotenv, не коммитится). Эталон — .env.example.

Обязательные:

КлючНазначениеГде используется
APP_NAMEИмя приложенияconfig/web/console id
APP_ENVdev / prodусловные блоки
COOKIE_VALIDATION_KEYВалидация кукweb.php request.cookieValidationKey
ADMIN_EMAILEmail администратораconfig/params.php → adminEmail
DB_DSNDSN БДconfig/db.php
DB_USERNAMEЛогин БДconfig/db.php
DB_PASSWORDПароль БДconfig/db.php
REDIS_HOSTRedis хостcontainer.php (Redis)
REDIS_PORTRedis портcontainer.php (Redis)
PASSPORT_URLURL Passportpassport/auth/config/params.php
FRONTEND_URLURL фронтендаpassport/auth/config/params.php
APP_URLURL APIpassport/auth/config/params.php
OAUTH2_CLIENT_IDID OAuth-клиентаpassport DI
OAUTH2_CLIENT_SECRETСекрет OAuth-клиентаpassport DI
OAUTH2_PUBLIC_KEY_PATHПуть к публичному ключу RS256passport DI
MAILER_SCHEME/HOST/PORT/USERNAME/PASSWORD/ENCRYPTIONНастройки SMTPweb.php mailer, console.php mailer
SENDER_EMAIL / SENDER_NAMEОтправитель писемconfig/params.php, container.php

Опциональные (есть дефолт в params.php):

КлючДефолт
OAUTH2_ACCESS_TOKEN_TTL3600
OAUTH2_REFRESH_TOKEN_TTL2592000
DEBUG_LVL0
REDIS_PASSWORD'' (пусто)

3. Файлы config/*.php

3.1. config/params.php

Общие параметры (читаются из .env):

return [
    'adminEmail'    => $_ENV['ADMIN_EMAIL'],
    'senderEmail'   => $_ENV['SENDER_EMAIL'],
    'senderName'    => $_ENV['SENDER_NAME'],
];

3.2. config/db.php

Параметры подключения к MySQL:

return [
    'class'     => 'yii\db\Connection',
    'dsn'       => $_ENV['DB_DSN'],
    'username'  => $_ENV['DB_USERNAME'],
    'password'  => $_ENV['DB_PASSWORD'],
    'charset'   => 'utf8',
];

3.3. config/web.php

Основная конфигурация веб-приложения. Содержит:

Что задаётся в коде (жёстко):

3.4. config/console.php

Конфигурация для консольных команд (php yii ...). Отличается от web.php:

3.5. config/modules.php

Реестр модулей — список ['class', 'controllerNamespace']:

'auth' => ['class' => 'modules\\passport\\auth\\Module', 'controllerNamespace' => …],
'tasks', 'projects', 'rbac', 'feedback'

3.6. config/container.php

DI-контейнер ядра. Регистрирует:

3.7. config/migration_namespaces.php

Пространства имён для миграций (используется при php yii migrate):

'core\\infrastructure\\migrations',
'modules\\rbac\\infrastructure\\migrations',
'modules\\tasks\\infrastructure\\migrations',
'modules\\projects\\infrastructure\\migrations',
'modules\\feedback\\infrastructure\\migrations',

3.8. config/test.php и config/test_db.php

Конфигурации для тестов. test_db.php может переопределять db.


4. Что задаётся в коде (жёстко) и почему

ФайлЧтоПочему не вынесено в конфиг
BaseControllerpageSizeLimit = [1, 1000], defaultPageSize = 20Константы приложения, разумные пределы
SyncUserHandlerРоль по умолчанию: сначала 'user', для owner ещё 'admin'Бизнес-логика (может быть сменено через разрешения, но не вынесено)
EmailChannelТип уведомления маппится на канал в match (type)Switch по типу — это не конфигурация, а роутинг
PassportAuthMiddlewareCookie-параметры: httpOnly=true, secure=true, sameSite=LAXОптимальные умолчания; sameSite, httpOnly и secure жёстко
PassportAuthMiddlewareАлгоритм JWT: RS256Задан Passport
RbacMiddlewareПравила public_routes и permission_rulesВ params.php модуля rbac (это конфиг, но PHP-файл)
Миграцииcharset utf8mb4, engine InnoDBСтандартные оптимизации
NotificationHubКаналы в конструкторе (email/telegram/push)Новые каналы нужно добавить в код

5. Миграции

ФайлТаблицы
core/migrations/m260922_080000_create_users_table.phpusers
core/migrations/m260922_080001_create_rbac_tables.phproles, user_roles
core/migrations/m260922_080002_seed_basic_data.phpseed: роли user, admin
modules/rbac/migrations/m260922_080010_create_permission_tables.phppermissions, role_permissions
modules/tasks/migrations/*tasks, task_comments, task_time_intervals, task_priorities, task_statuses, board_columns, stickers, task_sticker_map, daily_time_summary
modules/projects/migrations/*project, board, project_user, project_invitation
modules/feedback/migrations/*feedback_rating, feedback_idea