[12.x] Allow passing command class instances directly to Schedule::command()
and Artisan::call()
#56530
+60
−6
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR adds support for passing instantiated command objects (extending
Symfony\Component\Console\Command\Command
) directly to:Why?
Currently, when working with Artisan commands, developers must pass either the command signature (a string) or the class name (e.g.,
TestCommand::class
), which Laravel resolves from the container.Schedule::job()
method, which accepts either a job class instance or a job class name. If a class name is provided, Laravel resolves it from the container:https://github.com/laravel/framework/blob/12.x/src/Illuminate/Console/Scheduling/Schedule.php#L179
call()
method from thesrc/Illuminate/Console/Concerns/CallsCommands.php
trait (used in theIlluminate\Console\Command
class) allows this:https://github.com/laravel/framework/blob/12.x/src/Illuminate/Console/Concerns/CallsCommands.php#L27
parseCommand()
method insrc/Illuminate/Console/Application.php
, which checks if the argument is a subclass ofSymfonyCommand
. However, this logic was not accessible through higher-level APIs likeArtisan::call()
:https://github.com/laravel/framework/blob/12.x/src/Illuminate/Console/Application.php#L177
Changes
Before:
Now also supported: