我在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;}',
),
)
我做错了什么?
答案 0 :(得分:1)
你可以试试这个:
Queue::after(function (JobProcessed $event)
{
Log::info((array) unserialize($event->data['data']['command']));
});
这会生成对象的属性数组,然后记录它。
但这只是用于调试等。要实际获取对象的属性,请使用$obj->prop
概念。
答案 1 :(得分:0)
unserialize
方法的输出是一个对象,不能直接转换为字符串。
首先对事件命令进行反序列化,然后逐个记录对象属性。