Задать вопрос
  • Как создать очередь и запустить воркер динамически в yii2-queue?

    @sehav
    Мое решение:
    Отнаследовался от redisCommand
    use yii\queue\redis\Command;
    
    class RedisCommand extends Command
    {
        public function actionRun($channel = null)
        {
            if ($channel !== null) {
                $this->queue->channel = $channel;
            }
    
            return $this->queue->run(false);
        }
    }

    Подключил его в консольном конфиге
    'queue' => [
                'class' => \yii\queue\redis\Queue::class,
                'commandClass' => \app\commands\RedisCommand::class,
                'redis' => 'redis',
                'channel' => 'default', // Queue channel key
                'as log' => \yii\queue\LogBehavior::class,
            ]

    В консоли одноразово
    yii queue/run channel_group_1

    Для listen аналогично переопределите метод actionListen, только канал вторым параметром
    Команда будет выглядеть
    yii queue/run 3 channel_group_1
    Ответ написан
    Комментировать
  • Yii2 Queue Extension (Gearman) виснет при попытке добавить задачу. Что я делаю не так?

    @sehav
    А channel в консольном конфиге и в фронтовом одинаковые?
    запустите
    ./yii queue/listen --verbose
    вывод будет подробнее
    Ответ написан
    Комментировать
  • Как задать метод POST ссылке в классе Menu yii2?

    @sehav
    Код неправильный
    После первой замены атрибутов, все остальные ссылки пойдут с этим атрибутом

    Мое решение
    <?php
    
    namespace app\widgets;
    
    use yii\helpers\ArrayHelper;
    use yii\helpers\Html;
    
    class Menu extends \yii\widgets\Menu
    {
        public $linkTemplate = '<a href="{url}"{attr}>{label}</a>';
    
        public $linkOptions = [];
    
        protected function renderItem($item)
        {
            $template = ArrayHelper::getValue($item, 'template', $this->linkTemplate);
            $replace=[
                '{label}' => $item['label'],
                '{attr}'=>'',
                '{url}'=>''
            ];
    
            if (isset($item['url'])) {
                $replace['{url}']=Html::encode(Url::to($item['url']));
            }
    
            if (isset($item['linkOptions'])) {
                $replace['{attr}']=$item['linkOptions'];
            }
    
            return strtr($template, $replace);
        }
    }


    Есть возможность добавить еще какие-либо атрибуты, классы например
    Ответ написан
    Комментировать