无法反序列化队列作业数据

时间:2016-08-17 01:01:12

标签: laravel laravel-5 laravel-5.2

我在AppServiceProvider.php

中有这段代码
Queue::after(function (JobProcessed $event)
{
    Log::info(unserialize($event->data['data']['command']));
});

它只是一个工作成功执行时触发的工作事件(更多here,工作事件")。我从this问题得到了这个解决方案。

但是,上面的代码给出了错误:

  

' ErrorException'消息'类App \ Jobs \ SampleJob的对象无法转换为字符串'

以下是$event->data的输出:

array (
  'job' => 'Illuminate\\Queue\\CallQueuedHandler@call',
  'data' => 
  array (
    'commandName' => 'App\\Jobs\\SampleJob',
    'command' => 'O:21:"App\\Jobs\\SampleJob":5:{s:10:"' . "\0" . '*' . "\0" . 'post";O:45:"Illuminate\\Contracts\\Database\\ModelIdentifier":2:{s:5:"class";s:18:"App\\Models\\Post";s:2:"id";i:28711;}s:10:"connection";N;s:5:"queue";N;s:5:"delay";N;s:6:"' . "\0" . '*' . "\0" . 'job";N;}',
  ),
)  

我做错了什么?

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

Queue::after(function (JobProcessed $event)
{
    Log::info((array) unserialize($event->data['data']['command']));
});

这会生成对象的属性数组,然后记录它。

但这只是用于调试等。要实际获取对象的属性,请使用$obj->prop概念。

答案 1 :(得分:0)

unserialize方法的输出是一个对象,不能直接转换为字符串。

首先对事件命令进行反序列化,然后逐个记录对象属性。