ScheduleFinishCommand.php
TLDR
This file contains the ScheduleFinishCommand
class, which is responsible for handling the completion of a scheduled command.
Classes
ScheduleFinishCommand
The ScheduleFinishCommand
class extends the Command
class and is used to handle the completion of a scheduled command. It is hidden from the Artisan command list. The class has the following properties:
-
$signature
: The console command signature, which defines the command name and its arguments. -
$description
: The console command description. The class has one method: -
handle(Schedule $schedule)
: This method is responsible for executing the console command. It filters the events in the schedule by the providedid
argument, and for each matching event, it finishes the event and dispatches aScheduledBackgroundTaskFinished
event using the Laravel event dispatcher.
<?php
namespace Illuminate\Console\Scheduling;
use Illuminate\Console\Command;
use Illuminate\Console\Events\ScheduledBackgroundTaskFinished;
use Illuminate\Contracts\Events\Dispatcher;
use Symfony\Component\Console\Attribute\AsCommand;
#[AsCommand(name: 'schedule:finish')]
class ScheduleFinishCommand extends Command
{
/**
* The console command name.
*
* @var string
*/
protected $signature = 'schedule:finish {id} {code=0}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Handle the completion of a scheduled command';
/**
* Indicates whether the command should be shown in the Artisan command list.
*
* @var bool
*/
protected $hidden = true;
/**
* Execute the console command.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
public function handle(Schedule $schedule)
{
collect($schedule->events())->filter(function ($value) {
return $value->mutexName() == $this->argument('id');
})->each(function ($event) {
$event->finish($this->laravel, $this->argument('code'));
$this->laravel->make(Dispatcher::class)->dispatch(new ScheduledBackgroundTaskFinished($event));
});
}
}