1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
<?php
namespace Illuminate\Events;
use Illuminate\Contracts\Queue\Job; use Illuminate\Contracts\Container\Container;
class CallQueuedHandler { /** * The container instance. * * @var \Illuminate\Contracts\Container\Container */ protected $container;
/** * Create a new job instance. * * @param \Illuminate\Contracts\Container\Container $container * @return void */ public function __construct(Container $container) { $this->container = $container; }
/** * Handle the queued job. * * @param \Illuminate\Contracts\Queue\Job $job * @param array $data * @return void */ public function call(Job $job, array $data) { $handler = $this->setJobInstanceIfNecessary( $job, $this->container->make($data['class']) );
call_user_func_array( [$handler, $data['method']], unserialize($data['data']) );
if (! $job->isDeletedOrReleased()) { $job->delete(); } }
/** * Set the job instance of the given class if necessary. * * @param \Illuminate\Contracts\Queue\Job $job * @param mixed $instance * @return mixed */ protected function setJobInstanceIfNecessary(Job $job, $instance) { if (in_array('Illuminate\Queue\InteractsWithQueue', class_uses_recursive(get_class($instance)))) { $instance->setJob($job); }
return $instance; }
/** * Call the failed method on the job instance. * * The event instance and the exception will be passed. * * @param array $data * @param \Exception $e * @return void */ public function failed(array $data, $e) { $handler = $this->container->make($data['class']);
$parameters = array_merge(unserialize($data['data']), [$e]);
if (method_exists($handler, 'failed')) { call_user_func_array([$handler, 'failed'], $parameters); } } }
|