master

laravel/framework

Last updated at: 29/12/2023 09:23

Dispatchable.php

TLDR

The Dispatchable trait in the Illuminate\Foundation\Bus namespace provides methods for dispatching jobs and commands.

Methods

dispatch

Dispatches a job with the given arguments and returns a PendingDispatch instance.

dispatchIf

Dispatches a job with the given arguments if the given boolean test passes. If the test is an instance of a closure, it is called with a new instance of the class and the given arguments. Returns a PendingDispatch instance if the test passes and a Fluent instance if it fails.

dispatchUnless

Dispatches a job with the given arguments unless the given boolean test passes. If the test is an instance of a closure, it is called with a new instance of the class and the given arguments. Returns a PendingDispatch instance if the test fails and a Fluent instance if it passes.

dispatchSync

Dispatches a command to its appropriate handler in the current process. Jobs are dispatched to the "sync" queue. Returns the result of the dispatch.

dispatchAfterResponse

Dispatches a command to its appropriate handler after the current process. Calls the dispatch method with the given arguments and then calls the afterResponse method on the returned PendingDispatch instance. Returns the result of the afterResponse method.

withChain

Sets the jobs that should run if this job is successful. Returns a PendingChain instance.

<?php

namespace Illuminate\Foundation\Bus;

use Closure;
use Illuminate\Contracts\Bus\Dispatcher;
use Illuminate\Support\Fluent;

trait Dispatchable
{
    /**
     * Dispatch the job with the given arguments.
     *
     * @param  mixed  ...$arguments
     * @return \Illuminate\Foundation\Bus\PendingDispatch
     */
    public static function dispatch(...$arguments)
    {
        return new PendingDispatch(new static(...$arguments));
    }

    /**
     * Dispatch the job with the given arguments if the given truth test passes.
     *
     * @param  bool|\Closure  $boolean
     * @param  mixed  ...$arguments
     * @return \Illuminate\Foundation\Bus\PendingDispatch|\Illuminate\Support\Fluent
     */
    public static function dispatchIf($boolean, ...$arguments)
    {
        if ($boolean instanceof Closure) {
            $dispatchable = new static(...$arguments);

            return value($boolean, $dispatchable)
                ? new PendingDispatch($dispatchable)
                : new Fluent;
        }

        return value($boolean)
            ? new PendingDispatch(new static(...$arguments))
            : new Fluent;
    }

    /**
     * Dispatch the job with the given arguments unless the given truth test passes.
     *
     * @param  bool|\Closure  $boolean
     * @param  mixed  ...$arguments
     * @return \Illuminate\Foundation\Bus\PendingDispatch|\Illuminate\Support\Fluent
     */
    public static function dispatchUnless($boolean, ...$arguments)
    {
        if ($boolean instanceof Closure) {
            $dispatchable = new static(...$arguments);

            return ! value($boolean, $dispatchable)
                ? new PendingDispatch($dispatchable)
                : new Fluent;
        }

        return ! value($boolean)
            ? new PendingDispatch(new static(...$arguments))
            : new Fluent;
    }

    /**
     * Dispatch a command to its appropriate handler in the current process.
     *
     * Queueable jobs will be dispatched to the "sync" queue.
     *
     * @param  mixed  ...$arguments
     * @return mixed
     */
    public static function dispatchSync(...$arguments)
    {
        return app(Dispatcher::class)->dispatchSync(new static(...$arguments));
    }

    /**
     * Dispatch a command to its appropriate handler after the current process.
     *
     * @param  mixed  ...$arguments
     * @return mixed
     */
    public static function dispatchAfterResponse(...$arguments)
    {
        return self::dispatch(...$arguments)->afterResponse();
    }

    /**
     * Set the jobs that should run if this job is successful.
     *
     * @param  array  $chain
     * @return \Illuminate\Foundation\Bus\PendingChain
     */
    public static function withChain($chain)
    {
        return new PendingChain(static::class, $chain);
    }
}