我应该如何解码和"美化" Laravel失败的工作有效载荷?
在我的DB表中,failed_jobs我的列有效负载如下所示:
{"job":"Illuminate\\Queue\\CallQueuedHandler@call","data":{"commandName":"App\\Jobs\\createHostingOncPanel","command":"O:30:\"App\\Jobs\\createHostingOncPanel\":7:{s:10:\"\u0000*\u0000orderNo\";i:11;s:18:\"\u0000*\u0000hostingPackages\";s:45:\"[{\"domainName\":\"qwddqwd.io\",\"hostingType\":1}]\";s:7:\"\u0000*\u0000user\";O:45:\"Illuminate\\Contracts\\Database\\ModelIdentifier\":2:{s:5:\"class\";s:8:\"App\\User\";s:2:\"id\";i:1;}s:10:\"connection\";N;s:5:\"queue\";N;s:5:\"delay\";N;s:6:\"\u0000*\u0000job\";N;}"}}
希望将字符串json解码为可读的内容。
这是什么格式? :)
PS:这是一个Laravel 5.2版本
答案 0 :(得分:9)
从failed_jobs表中读取
json_decode来自failed_jobs表的有效负载
$jsonpayload = json_decode($payload);
反序列化有效负载命令
$data = unserialize($jsonpayload->data->command);
print_r($data);//This is the data passed to queue
答案 1 :(得分:2)
我也遇到了问题,因为我无法直接访问生产数据库。 我使用auth创建了一条路由,并且我的控制器返回了json,其中包含所有失败的作业的格式。这是控制器代码。有了这个,我也能够获得格式化的异常堆栈跟踪,因为该作业失败了
public function getFailedJob()
{
#Fetch all the failed jobs
$jobs = DB::table('failed_jobs')->select()->get();
#Loop through all the failed jobs and format them for json printing
foreach ($jobs as $job) {
$jsonpayload = json_decode($job->payload);
$job->payload = $jsonpayload;
$jsonpayload->data->command = unserialize($jsonpayload->data->command);
$job->exception = explode("\n", $job->exception);
}
return response()->json($jobs);
}
答案 2 :(得分:1)
我建议处理事件,然后以自己的方式存储您需要的任何数据。您可以使用失败的作业事件来捕获所有失败的作业:https://laravel.com/docs/master/queues#failed-job-events
或者您可以在作业本身使用(let/cc k0
((let/cc k1
(k0 (sub1 (let/cc k2
(k1 k2)))))
1))
(let/cc k0
(k2 1))
(let/cc k0
((let/cc k1
(k0 (sub1 1)))
1))
(let/cc k0
((let/cc k1
(k0 0))
1))
0
功能:https://laravel.com/docs/master/queues#dealing-with-failed-jobs
否则,Marc的评论似乎对我有意义。
答案 3 :(得分:1)
尝试
$j = App\Models\Jobs::select('payload')->get();
$aw = json_decode($j[0]->payload)->data->command;
$cm = unserialize($aw);
dd($cm->payload);