Друзья, помогите пожалуйста решить задачку.
Имеется GridView, в котором реализовал возможность отправки нескольких строк в задачу.
Каждая строка (id и title) отправляется в отдельную задачу, где выполняется долгий запрос к API.
В воркере происходит получение данных по API и сохранение в соответствующей (по id) модели.
Все бы хорошо, но уже третий день не могу решить - как оповещать в интерфейсе, что такая-то строка получила данные? Пока не обновишь страницу и не найдешь в таблице эту строку - не поймешь.
Логично, что можно навесить событие yii\queue\Queue::EVENT_BEFORE_EXEC и обновить страницу, отправив session->setFlash(), что я и попытался сделать:
В конфиге:
'on '.yii\queue\Queue::EVENT_BEFORE_EXEC => function($event) {
$model = new Model;
$model->trigger(Model::EVENT_NAME);
},
В моделе:
public function init()
{
$this->on(Model::EVENT_NAME, function(){
Yii::$app->session->setFlash('success', "Ok");
});
parent::init();
}
Но такая схема не срабатывает, так как в console нет session.
Дальше я пытался обойти это, вызвав экшен в контроллере веб-приложения (отключая при это Csrf):
'on '.yii\queue\Queue::EVENT_BEFORE_EXEC => function($event) {
Yii::$app->controllerNamespace = "backend\controllers";
Yii::$app->runAction('default/event');
},
Но тоже все безуспешно, так как метод redirect() в этом экшене не может быть вызван из консольного приложения.
Пока писал - вдруг сам понял бредовость своих мыслей)) как глупо было бы отправлять запрос на обновление страницы в то время, когда ты пользуешься сайтом.
Получается, однозначно нужно это делать без перезагрузки страницы - значит скорее всего с помощью ajax.
Как вообще такие задачи решаются?