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

Документ описывает DI-регистрацию, маршруты и подписки модуля feedback.

1. config/di.php

$container = Yii::$container;

$container->setSingleton(IFeedbackRatingRepository::class, function () {
    return new DbFeedbackRatingRepository();
});

$container->setSingleton(IFeedbackIdeaRepository::class, function () {
    return new DbFeedbackIdeaRepository();
});

// Глобальная подписка на событие ядра/модуля
$globalDispatcher = Yii::$container->get(GlobalEventDispatcher::class);
$globalDispatcher->addListener(RatingSubmittedEvent::class, SendNonMaxRatingEmailListener::class);

Ключевое: модуль не имеет собственного ModuleEventDispatcher — использует глобальную шину ядра напрямую.

2. config/routing.php

return [
    'POST feedback/rating' => 'feedback/feedback/submit-rating',
    'POST feedback/idea'   => 'feedback/feedback/submit-idea',
    'GET  feedback/idea'   => 'feedback/feedback/ideas',
    'GET  feedback/stats'  => 'feedback/feedback/stats',
];

3. Контроллер

FeedbackController (единственный) — действия:

Наследует BaseController (единые обёртки ответов: item, collection, error).

4. Порядок подключения

5. Что задаётся в коде (не конфиг)

ЧтоГде
Тема и текст письма «Помогите нам стать лучше»SendNonMaxRatingEmailListener
«Максимальность» оценки: value >= 4VO Rating::isMax()
Разрешённые типы идейVO IdeaType
Каналы по умолчанию ['email','push']BaseNotificationListener::getChannels()
Диапазон оценки 0–5VO Rating (+CHECK-constraints в миграции)