В Laravel 5.1 я хотел бы получить уведомление о завершении задания с подробной информацией о задании (в частности, user_id
и customer_id
). Я использую метод Queue::after
method в AppServiceProvider
как предлагает Laravel.
Если дамп параметра $data
выглядит так:
Queue::after(function ($connection, $job, $data) { var_dump($data); exit; });
Я получаю следующее:
array(2) { ["job"]=> string(39) "Illuminate\Queue\CallQueuedHandler@call" ["data"]=> array(1) { ["command"]=> string(263) "O:23:"App\Jobs\ExportContacts":4:{s:7:"*data";a:5:{s:7:"user_id";s:1:"2";s:10:"customer_id";s:1:"1";s:6:"filter";N;s:5:"dates";a:2:{i:0;i:1445352975;i:1;i:1448034975;}s:4:"file";s:31:"/tend_10-20-2015-11-20-2015.csv";}s:5:"queue";N;s:5:"delay";N;s:6:"*job";N;}" } }
Массив data
содержит как user_id
и customer_id
которые мне user_id
. Это здорово. Но как мне разобрать этот ответ, чтобы вытащить эту информацию.
Моя единственная мысль – использовать регулярное выражение. Но я думал, что проверю, есть ли лучший способ?
Данные сериализуются. Вам нужно только:
$command = unserialize($data['data']['command']);
Для Laravel 5.2:
Queue::after(function (JobProcessed $event) { $command = unserialize($event->data['data']['command']); });
Я думаю, что вам не нужно получать данные из data
. Я покажу вам простое использование очереди :: позже
$yourData = $data_which_you_need; $date = Carbon::now()->addMinutes(10); Queue::later($date, function($job) use ($yourData){ // THIS CODE WILL BE EXECUTE AFTER 10 MINUTES $user_id = $yourData['user_id']; User::find($user_id)->destroy(); $job->delete(); });
Я надеюсь, что я помогу вам
Есть ли способ вытащить переменные, которые вы передали заданию в очередь: после? Вам нужно было использовать регулярное выражение? Даже после неэтериализации его массивной строки данных.
По-прежнему возникают проблемы с извлечением данных из задания, которое только что запущено в очередь :: after