Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
namespace Illuminate\Queue;
4
 
5
use Closure;
6
use Illuminate\Bus\Batchable;
7
use Illuminate\Bus\Queueable;
8
use Illuminate\Contracts\Container\Container;
9
use Illuminate\Contracts\Queue\ShouldQueue;
10
use Illuminate\Foundation\Bus\Dispatchable;
11
use Laravel\SerializableClosure\SerializableClosure;
12
use ReflectionFunction;
13
 
14
class CallQueuedClosure implements ShouldQueue
15
{
16
    use Batchable, Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
17
 
18
    /**
19
     * The serializable Closure instance.
20
     *
21
     * @var \Laravel\SerializableClosure\SerializableClosure
22
     */
23
    public $closure;
24
 
25
    /**
26
     * The callbacks that should be executed on failure.
27
     *
28
     * @var array
29
     */
30
    public $failureCallbacks = [];
31
 
32
    /**
33
     * Indicate if the job should be deleted when models are missing.
34
     *
35
     * @var bool
36
     */
37
    public $deleteWhenMissingModels = true;
38
 
39
    /**
40
     * Create a new job instance.
41
     *
42
     * @param  \Laravel\SerializableClosure\SerializableClosure  $closure
43
     * @return void
44
     */
45
    public function __construct($closure)
46
    {
47
        $this->closure = $closure;
48
    }
49
 
50
    /**
51
     * Create a new job instance.
52
     *
53
     * @param  \Closure  $job
54
     * @return self
55
     */
56
    public static function create(Closure $job)
57
    {
58
        return new self(new SerializableClosure($job));
59
    }
60
 
61
    /**
62
     * Execute the job.
63
     *
64
     * @param  \Illuminate\Contracts\Container\Container  $container
65
     * @return void
66
     */
67
    public function handle(Container $container)
68
    {
69
        $container->call($this->closure->getClosure(), ['job' => $this]);
70
    }
71
 
72
    /**
73
     * Add a callback to be executed if the job fails.
74
     *
75
     * @param  callable  $callback
76
     * @return $this
77
     */
78
    public function onFailure($callback)
79
    {
80
        $this->failureCallbacks[] = $callback instanceof Closure
81
                        ? new SerializableClosure($callback)
82
                        : $callback;
83
 
84
        return $this;
85
    }
86
 
87
    /**
88
     * Handle a job failure.
89
     *
90
     * @param  \Throwable  $e
91
     * @return void
92
     */
93
    public function failed($e)
94
    {
95
        foreach ($this->failureCallbacks as $callback) {
96
            $callback($e);
97
        }
98
    }
99
 
100
    /**
101
     * Get the display name for the queued job.
102
     *
103
     * @return string
104
     */
105
    public function displayName()
106
    {
107
        $reflection = new ReflectionFunction($this->closure->getClosure());
108
 
109
        return 'Closure ('.basename($reflection->getFileName()).':'.$reflection->getStartLine().')';
110
    }
111
}