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

namespace IlluminateFoundationBus;

use 
Closure;
use 
IlluminateContractsBusDispatcher;
use 
IlluminateQueueCallQueuedClosure;
use 
IlluminateSupportTraitsConditionable;
use 
LaravelSerializableClosureSerializableClosure;

class 
PendingChain
{
    use 
Conditionable;

    
/**
     * The class name of the job being dispatched.
     *
     * @var mixed
     */
    
public $job;

    
/**
     * The jobs to be chained.
     *
     * @var array
     */
    
public $chain;

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

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

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

    
/**
     * The callbacks to be executed on failure.
     *
     * @var array
     */
    
public $catchCallbacks = [];

    
/**
     * Create a new PendingChain instance.
     *
     * @param  mixed  $job
     * @param  array  $chain
     * @return void
     */
    
public function __construct($job$chain)
    {
        
$this->job $job;
        
$this->chain $chain;
    }

    
/**
     * 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 delay in seconds for the chain.
     *
     * @param  DateTimeInterface|DateInterval|int|null  $delay
     * @return $this
     */
    
public function delay($delay)
    {
        
$this->delay $delay;

        return 
$this;
    }

    
/**
     * Add a callback to be executed on job failure.
     *
     * @param  callable  $callback
     * @return $this
     */
    
public function catch($callback)
    {
        
$this->catchCallbacks[] = $callback instanceof Closure
                        
? new SerializableClosure($callback)
                        : 
$callback;

        return 
$this;
    }

    
/**
     * Get the "catch" callbacks that have been registered.
     *
     * @return array
     */
    
public function catchCallbacks()
    {
        return 
$this->catchCallbacks ?? [];
    }

    
/**
     * Dispatch the job chain.
     *
     * @return IlluminateFoundationBusPendingDispatch
     */
    
public function dispatch()
    {
        if (
is_string($this->job)) {
            
$firstJob = new $this->job(...func_get_args());
        } elseif (
$this->job instanceof Closure) {
            
$firstJob CallQueuedClosure::create($this->job);
        } else {
            
$firstJob $this->job;
        }

        if (
$this->connection) {
            
$firstJob->chainConnection $this->connection;
            
$firstJob->connection $firstJob->connection ?: $this->connection;
        }

        if (
$this->queue) {
            
$firstJob->chainQueue $this->queue;
            
$firstJob->queue $firstJob->queue ?: $this->queue;
        }

        if (
$this->delay) {
            
$firstJob->delay = ! is_null($firstJob->delay) ? $firstJob->delay $this->delay;
        }

        
$firstJob->chain($this->chain);
        
$firstJob->chainCatchCallbacks $this->catchCallbacks();

        return 
app(Dispatcher::class)->dispatch($firstJob);
    }

    
/**
     * Dispatch the job chain if the given truth test passes.
     *
     * @param  bool|Closure  $boolean
     * @return IlluminateFoundationBusPendingDispatch|null
     */
    
public function dispatchIf($boolean)
    {
        return 
value($boolean) ? $this->dispatch() : null;
    }

    
/**
     * Dispatch the job chain unless the given truth test passes.
     *
     * @param  bool|Closure  $boolean
     * @return IlluminateFoundationBusPendingDispatch|null
     */
    
public function dispatchUnless($boolean)
    {
        return ! 
value($boolean) ? $this->dispatch() : null;
    }
}
Онлайн: 1
Реклама