Задать вопрос
Ответы пользователя по тегу Yii
  • Как изменить поля в модели через n-времени в Yii2?

    @Holyboom Автор вопроса
    junior fullstack
    короч как сделал .
    поставил плагин для yii "composer require --prefer-dist yiisoft/yii2-queue"
    в common/config/main добавил
    'components' => [
            'queue' => [
                'class' => \yii\queue\file\Queue::class,
                'path' => '@console/runtime/queue',
                'as log' => \yii\queue\LogBehavior::class,
            ],
    'bootstrap' => [
            'queue',
        ],


    создал класс отвечающий за таски
    <?php
    class QueueHelper
    {
        public static function setTask ($task) {
            Yii::$app->queue->push($task);
        }
        public static function setDelayTask ($task , $delay = 5) {  // delay  - задержка выполнения в сек
            Yii::$app->queue->delay($delay)->push($task);
        }
    }


    и класс с самой таской
    class TaskEndEvent extends BaseObject implements \yii\queue\JobInterface
    {
        public $idTask;
        public function execute($queue)
        {
            $e = Events::findOne($this->idTask);
            if ($e->status != 1 ){
                $e->ended_at = $e->creation_at + 7200 ;
                $e->status = 1 ;
                $e->save(false);
            }
        }
    }


    и сделал вызов при сохранении
    public function afterSave($insert, $changedAttributes)
        {
            parent::afterSave($insert, $changedAttributes);
            if ($this->status != 1){
                QueueHelper::setDelayTask(new TaskEndEvent(['idTask'=>$this->id]), 7200);
            }
        }


    и кроном запустил проверку на наличие актуальных таск
    cron run * * * * * /usr/bin/php /var/www/my_project/yii queue/run


    можно повесить слушатель таск в консоли
    yii queue/listen
    Ответ написан
    Комментировать