Back to Speedtest Tracker

Command Entrypoint (`asCommand`)

.cursor/skills/laravel-actions/references/command.md

1.14.03.1 KB
Original Source

Command Entrypoint (asCommand)

Scope

Use this reference when exposing actions as Artisan commands.

Recap

  • Documents command execution via asCommand(...) and fallback to handle(...).
  • Covers command metadata via methods/properties (signature, description, help, hidden).
  • Includes registration example and focused artisan test pattern.
  • Reinforces separation between console I/O and domain logic.
  • Define $commandSignature and $commandDescription.
  • Implement asCommand(Command $command) for console I/O.
  • Keep business logic in handle(...).

Methods used (CommandDecorator)

asCommand

Called when executed as a command. If missing, it falls back to handle(...).

php
use Illuminate\Console\Command;

class UpdateUserRole
{
    use AsAction;

    public string $commandSignature = 'users:update-role {user_id} {role}';

    public function handle(User $user, string $newRole): void
    {
        $user->update(['role' => $newRole]);
    }

    public function asCommand(Command $command): void
    {
        $this->handle(
            User::findOrFail($command->argument('user_id')),
            $command->argument('role')
        );

        $command->info('Done!');
    }
}

getCommandSignature

Defines the command signature. Required when registering an action as a command if no $commandSignature property is set.

php
public function getCommandSignature(): string
{
    return 'users:update-role {user_id} {role}';
}

$commandSignature

Property alternative to getCommandSignature.

php
public string $commandSignature = 'users:update-role {user_id} {role}';

getCommandDescription

Provides command description.

php
public function getCommandDescription(): string
{
    return 'Updates the role of a given user.';
}

$commandDescription

Property alternative to getCommandDescription.

php
public string $commandDescription = 'Updates the role of a given user.';

getCommandHelp

Provides additional help text shown with --help.

php
public function getCommandHelp(): string
{
    return 'My help message.';
}

$commandHelp

Property alternative to getCommandHelp.

php
public string $commandHelp = 'My help message.';

isCommandHidden

Defines whether command should be hidden from artisan list. Default is false.

php
public function isCommandHidden(): bool
{
    return true;
}

$commandHidden

Property alternative to isCommandHidden.

php
public bool $commandHidden = true;

Examples

Register in console kernel

php
// app/Console/Kernel.php
protected $commands = [
    UpdateUserRole::class,
];

Focused command test

php
$this->artisan('users:update-role 1 admin')
    ->expectsOutput('Done!')
    ->assertSuccessful();

Checklist

  • use Illuminate\Console\Command; is imported.
  • Signature/options/arguments are documented.
  • Command test verifies invocation and output.

Common pitfalls

  • Mixing command I/O with domain logic in handle(...).
  • Missing/ambiguous command signature.

References