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'],
];
}
}