在 Laravel Artisan 命令中,获取控制台选项需先在 configure() 中用 addOption() 声明(支持布尔型、值型、数组型),再通过 $this->option('name') 在 handle() 中获取,未定义选项返回 null。

在 Laravel 的 Artisan 命令中,获取控制台选项(options)主要通过 $this->option('name') 方法,它对应命令行中以 -- 开头的参数(如 --force、--env=local)。
定义选项:在 configure() 中声明
使用 protected function configure() 注册选项,支持必需/可选、默认值、描述等:
-
布尔型选项(开关):不带值,存在即为
true -
值型选项(带参数):需用
InputOption::VALUE_REQUIRED或VALUE_OPTIONAL
示例:
protected function configure()
{
$this->addOption('force', 'f', InputOption::VALUE_NONE, 'Force the operation to run')
->addOption('env', null, InputOption::VALUE_REQUIRED, 'The environment name', 'production');
}
获取选项值:用 option() 方法
在 handle() 方法中调用 $this->option('xxx') 获取值:
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
-
$this->option('force')→ 返回bool(有则true,否则false) -
$this->option('env')→ 返回字符串(如'local'),未传时取默认值'production' - 未定义的选项会返回
null,建议配合filled()或空值判断
常见用法与注意事项
- 短选项(如
-f)需在addOption()中通过第二个参数指定,且必须与长选项绑定 - 选项名区分大小写,
--Env和--env是不同选项 - 如果同时传了
--env=staging和--env staging,后者会被忽略(Laravel 只取第一个有效值) - 多个同名选项(如
--tag=a --tag=b)默认只取最后一个;如需数组,用VALUE_IS_ARRAY
完整命令示例
运行:php artisan send:emails --force --env=testing
代码中:
public function handle()
{
if ($this->option('force')) {
$this->info('Force mode enabled');
}
$env = $this->option('env'); // 'testing'
$this->line("Running in {$env} environment");
}
不复杂但容易忽略细节,关键是先声明再获取,类型和默认值要对齐。










