Add Nightwatch configuration guidance and MCP development skill docs across agent integrations, and refresh existing Laravel skill references.
160 lines
3.1 KiB
Markdown
160 lines
3.1 KiB
Markdown
# 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.
|
|
|
|
## Recommended pattern
|
|
|
|
- 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
|
|
|
|
- https://www.laravelactions.com/2.x/as-command.html
|