Правильный бутстрапинг (Bootstrapping) компонентов в модуле

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
donitoza
Сообщения: 24
Зарегистрирован: 2012.05.30, 17:59

Правильный бутстрапинг (Bootstrapping) компонентов в модуле

Сообщение donitoza » 2018.02.22, 16:42

Здравствуйте, уважаемые форумчане.
Прошу вывести меня из тупика...

Пытаюсь вынести функционал очередей в модуль. Очереди на базе yiisoft/yii2-queue.
ИМХО, правильно было бы компоненты очереди перенести в модуль и сделал это так:

Код: Выделить всё

    'bootstrap' => [ 'jobqueue'],
    
    'modules' => [
        'jobqueue' => [
            'class' => 'common\modules\jobqueue\Module',
            'params' => ['moduleParams'=>'moduleParams'],
            'components' => [
                'queueMessage' => [
                    'class' => \yii\queue\redis\Queue::class,
                    'redis' => 'redis', // Компонент подключения к Redis или его конфиг
                    'channel' => 'queueMessage', // Ключ канала очереди
                    'as log' => \yii\queue\LogBehavior::class,
                ],
            ],
        ],
    ],
Сделал предзагрузку модуля (см. код выше) и задал controllerNamespace при инициализации модуля.

Сейчас, контроллеры модуля нормально выводят информацию о своих действиях (actions) в консоль yii.
Но как правильно добиться, что бы проходила загрузка консольных действия из компонента queueMessage - я так и не разобрался.
Прошу помощи.
Заранее спасибо.

Аватара пользователя
KiTE
Сообщения: 112
Зарегистрирован: 2012.04.12, 14:47

Re: Правильный бутстрапинг (Bootstrapping) компонентов в модуле

Сообщение KiTE » 2018.03.02, 23:20

Компонент очереди, чтобы он зарегистрировал свои консольные команды, нужно бутстрапить. Это реализовано в https://github.com/yiisoft/yii2-queue/b ... hp#L80-L91. Чтобы пробросить команды очереди в модуль, вам нужно в Module::bootstrap() добавить что-то вроде этого:

Код: Выделить всё

$this->controllerMap['queue'] = [
    'class' => $this->queue->commandClass,
    'queue' => $this->queue,
];
А зачем вам такая компановка, чтобы очередь была именно в локаторе модуля?

Ответить