Laravel Artisan 命令行:获取参数
问题
我如何在命令中获取用户输入的参数?
回答
不论是在命令类文件中,还是在闭包命令中,你都可用 argument
方法来获取用户输入的特定参数。
假设我们在命令类的 handle()
方法中要获取用户输入的 text
参数:
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$text = $this->argument('text');
}
如果你想一次性获取所有的参数,可以调用 arguments
方法,它返回一个包含所有参数的数组:
$arguments = $this->arguments();
$this->info($arguments['text']);
注意:这里说的包含所有参数,是指包含所有你在创建命令时定义的参数,还包括一个 command
项,它的值是命令名。
不管是 argument
还是 arguments
方法,如果用户没有输入这个参数,有默认值的,返回默认值,否则返回 NULL
。
在闭包命令中,除了象命令类那样通过 argument
和 arguments
方法来获取用户输入的参数外,还可以直接在闭包函数的参数列表中列出要使用的参数与选项:
方式一:
Artisan::command('hash:md5 {text} {--uppercase}', function () {
$text = $this->argument('text');
$uppercase = $this->option('uppercase');
$md5text = $uppercase ? strtoupper(md5($text)) : md5($text);
$this->info("md5('{$text}') = $md5text");
})->describe('Calculate the md5 hash of a text');
方式二:
Artisan::command('hash:md5 {text} {--uppercase}', function ($text, $uppercase) {
$md5text = $uppercase ? strtoupper(md5($text)) : md5($text);
$this->info("md5('{$text}') = $md5text");
})->describe('Calculate the md5 hash of a text');