Вход Регистрация
Файл: vendor/laravel/framework/src/Illuminate/Bus/Queueable.php
Строк: 278
<?php

namespace IlluminateBus;

use 
Closure;
use 
IlluminateQueueCallQueuedClosure;
use 
IlluminateSupportArr;
use 
RuntimeException;

trait 
Queueable
{
    
/**
     * The name of the connection the job should be sent to.
     *
     * @var string|null
     */
    
public $connection;

    
/**
     * The name of the queue the job should be sent to.
     *
     * @var string|null
     */
    
public $queue;

    
/**
     * The name of the connection the chain should be sent to.
     *
     * @var string|null
     */
    
public $chainConnection;

    
/**
     * The name of the queue the chain should be sent to.
     *
     * @var string|null
     */
    
public $chainQueue;

    
/**
     * The callbacks to be executed on chain failure.
     *
     * @var array|null
     */
    
public $chainCatchCallbacks;

    
/**
     * The number of seconds before the job should be made available.
     *
     * @var DateTimeInterface|DateInterval|array|int|null
     */
    
public $delay;

    
/**
     * Indicates whether the job should be dispatched after all database transactions have committed.
     *
     * @var bool|null
     */
    
public $afterCommit;

    
/**
     * The middleware the job should be dispatched through.
     *
     * @var array
     */
    
public $middleware = [];

    
/**
     * The jobs that should run if this job is successful.
     *
     * @var array
     */
    
public $chained = [];

    
/**
     * Set the desired connection for the job.
     *
     * @param  string|null  $connection
     * @return $this
     */
    
public function onConnection($connection)
    {
        
$this->connection $connection;

        return 
$this;
    }

    
/**
     * Set the desired queue for the job.
     *
     * @param  string|null  $queue
     * @return $this
     */
    
public function onQueue($queue)
    {
        
$this->queue $queue;

        return 
$this;
    }

    
/**
     * Set the desired connection for the chain.
     *
     * @param  string|null  $connection
     * @return $this
     */
    
public function allOnConnection($connection)
    {
        
$this->chainConnection $connection;
        
$this->connection $connection;

        return 
$this;
    }

    
/**
     * Set the desired queue for the chain.
     *
     * @param  string|null  $queue
     * @return $this
     */
    
public function allOnQueue($queue)
    {
        
$this->chainQueue $queue;
        
$this->queue $queue;

        return 
$this;
    }

    
/**
     * Set the desired delay in seconds for the job.
     *
     * @param  DateTimeInterface|DateInterval|array|int|null  $delay
     * @return $this
     */
    
public function delay($delay)
    {
        
$this->delay $delay;

        return 
$this;
    }

    
/**
     * Indicate that the job should be dispatched after all database transactions have committed.
     *
     * @return $this
     */
    
public function afterCommit()
    {
        
$this->afterCommit true;

        return 
$this;
    }

    
/**
     * Indicate that the job should not wait until database transactions have been committed before dispatching.
     *
     * @return $this
     */
    
public function beforeCommit()
    {
        
$this->afterCommit false;

        return 
$this;
    }

    
/**
     * Specify the middleware the job should be dispatched through.
     *
     * @param  array|object  $middleware
     * @return $this
     */
    
public function through($middleware)
    {
        
$this->middleware Arr::wrap($middleware);

        return 
$this;
    }

    
/**
     * Set the jobs that should run if this job is successful.
     *
     * @param  array  $chain
     * @return $this
     */
    
public function chain($chain)
    {
        
$this->chained collect($chain)->map(function ($job) {
            return 
$this->serializeJob($job);
        })->
all();

        return 
$this;
    }

    
/**
     * Prepend a job to the current chain so that it is run after the currently running job.
     *
     * @param  mixed  $job
     * @return $this
     */
    
public function prependToChain($job)
    {
        
$this->chained Arr::prepend($this->chained$this->serializeJob($job));

        return 
$this;
    }

    
/**
     * Append a job to the end of the current chain.
     *
     * @param  mixed  $job
     * @return $this
     */
    
public function appendToChain($job)
    {
        
$this->chained array_merge($this->chained, [$this->serializeJob($job)]);

        return 
$this;
    }

    
/**
     * Serialize a job for queuing.
     *
     * @param  mixed  $job
     * @return string
     *
     * @throws RuntimeException
     */
    
protected function serializeJob($job)
    {
        if (
$job instanceof Closure) {
            if (! 
class_exists(CallQueuedClosure::class)) {
                throw new 
RuntimeException(
                    
'To enable support for closure jobs, please install the illuminate/queue package.'
                
);
            }

            
$job CallQueuedClosure::create($job);
        }

        return 
serialize($job);
    }

    
/**
     * Dispatch the next job on the chain.
     *
     * @return void
     */
    
public function dispatchNextJobInChain()
    {
        if (! empty(
$this->chained)) {
            
dispatch(tap(unserialize(array_shift($this->chained)), function ($next) {
                
$next->chained $this->chained;

                
$next->onConnection($next->connection ?: $this->chainConnection);
                
$next->onQueue($next->queue ?: $this->chainQueue);

                
$next->chainConnection $this->chainConnection;
                
$next->chainQueue $this->chainQueue;
                
$next->chainCatchCallbacks $this->chainCatchCallbacks;
            }));
        }
    }

    
/**
     * Invoke all of the chain's failed job callbacks.
     *
     * @param  Throwable  $e
     * @return void
     */
    
public function invokeChainCatchCallbacks($e)
    {
        
collect($this->chainCatchCallbacks)->each(function ($callback) use ($e) {
            
$callback($e);
        });
    }
}
Онлайн: 1
Реклама