master

laravel/framework

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

ClearCommand.php

TLDR

The ClearCommand.php file is a part of the Illuminate\Queue\Console namespace in the Laravel framework. It provides a command-line interface for deleting all jobs from a specified queue.

Methods

handle

The handle method executes the console command. It confirms whether the user wants to proceed with the operation and then clears all jobs from the specified queue using the ClearableQueue interface. If the queue does not support clearing, an error message is displayed.

getQueue

The getQueue method retrieves the name of the queue to clear based on the specified connection. It checks if a queue name is provided as an option and if not, it uses the default queue specified in the configuration file.

getArguments

The getArguments method defines the command-line arguments for the queue:clear command. It includes the connection argument, which specifies the name of the queue connection to clear.

getOptions

The getOptions method defines the command-line options for the queue:clear command. It includes the queue option, which specifies the name of the queue to clear, and the force option, which forces the operation to run even in production environments.

Classes

ClearCommand

The ClearCommand class extends the Command class from the Laravel framework and represents the queue:clear command. It provides the functionality to delete all jobs from the specified queue. The class uses the ConfirmableTrait to prompt the user for confirmation before proceeding with the operation.

<?php

namespace Illuminate\Queue\Console;

use Illuminate\Console\Command;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Contracts\Queue\ClearableQueue;
use Illuminate\Support\Str;
use ReflectionClass;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;

#[AsCommand(name: 'queue:clear')]
class ClearCommand extends Command
{
    use ConfirmableTrait;

    /**
     * The console command name.
     *
     * @var string
     */
    protected $name = 'queue:clear';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Delete all of the jobs from the specified queue';

    /**
     * Execute the console command.
     *
     * @return int|null
     */
    public function handle()
    {
        if (! $this->confirmToProceed()) {
            return 1;
        }

        $connection = $this->argument('connection')
                        ?: $this->laravel['config']['queue.default'];

        // We need to get the right queue for the connection which is set in the queue
        // configuration file for the application. We will pull it based on the set
        // connection being run for the queue operation currently being executed.
        $queueName = $this->getQueue($connection);

        $queue = $this->laravel['queue']->connection($connection);

        if ($queue instanceof ClearableQueue) {
            $count = $queue->clear($queueName);

            $this->components->info('Cleared '.$count.' '.Str::plural('job', $count).' from the ['.$queueName.'] queue');
        } else {
            $this->components->error('Clearing queues is not supported on ['.(new ReflectionClass($queue))->getShortName().']');
        }

        return 0;
    }

    /**
     * Get the queue name to clear.
     *
     * @param  string  $connection
     * @return string
     */
    protected function getQueue($connection)
    {
        return $this->option('queue') ?: $this->laravel['config']->get(
            "queue.connections.{$connection}.queue", 'default'
        );
    }

    /**
     *  Get the console command arguments.
     *
     * @return array
     */
    protected function getArguments()
    {
        return [
            ['connection', InputArgument::OPTIONAL, 'The name of the queue connection to clear'],
        ];
    }

    /**
     * Get the console command options.
     *
     * @return array
     */
    protected function getOptions()
    {
        return [
            ['queue', null, InputOption::VALUE_OPTIONAL, 'The name of the queue to clear'],

            ['force', null, InputOption::VALUE_NONE, 'Force the operation to run when in production'],
        ];
    }
}