Laravel Artisan 命令行:获取参数 1 个改进

问题

我如何在命令中获取用户输入的参数?

回答

不论是在命令类文件中,还是在闭包命令中,你都可用 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

在闭包命令中,除了象命令类那样通过 argumentarguments 方法来获取用户输入的参数外,还可以直接在闭包函数的参数列表中列出要使用的参数与选项:

方式一:

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');

参考

本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!