laravel 命令行
protected $signature = 'make:migration {name : The name of the migration}
{--create= : The table to be created}
{--table= : The table to migrate}
{--path= : The location where the migration file should be created}
{--realpath : Indicate any provided migration file paths are pre-resolved absolute paths}';
参数:必填、可选和默认参数
要定义一个必填参数,需要用花括号将其包裹起来:
make:migration {name}
要定义一个可选参数,可以在参数名称后面加一个问号:
make:migration {name?}
要为可选参数定义默认值,可以这么做:
make:migration {name=create_users_table}
选项:必须设值、默认值以及缩写
选项和参数很像,但是选项有前缀 --,而且可以在没有值的情况下使用,要添加一个最基本的选项,可以通过花括号将其包裹:
make:migration {name} {--table}
如果这个选项必须要设置选项值,可以加上一个 =:
make:migration {name} {--table=}
然后如果你想要为其设置默认选项值,可以这么做:
make:migration {name} {--table=users}
此外,选项还支持缩写,比如我们可以通过 T 来代表 table:
make:migration {name} {--T|table}
数组参数和数组选项
不管是参数还是选项,如果你想要接收数组作为参数,都要使用 * 通配符:
make:migration {name*} {--table=*}
数组参数和选项的调用方式如下(这里仅作演示,make:migration 本身不支持这么干):
make:migration create_users_table create_posts_table --table=users --table=posts
注:数组参数必须是参数列表中的最后一个参数。
获取参数和选项
接下来,我们需要在命令类中获取参数和选项信息,在此之前,根据上述知识点,我们改写下自定义的 welcome:message 命令的 $signature 属性:
protected $signature = 'welcome:message {name : 用户名} {--city : 来自的城市}';
获取参数和选项
接下来,我们需要在命令类中获取参数和选项信息,在此之前,根据上述知识点,我们改写下自定义的 welcome:message 命令的 $signature 属性:
protected $signature = 'welcome:message {name : 用户名} {--city : 来自的城市}';
在命令类中我们可以通过 this->option() 方法获取选项值,不带参数返回所有选项值,传入指定选项名返回对应的选项值。为此,我们改写 welcome:message 命令的 handle() 方法如下:
public function handle()
{
$this->info('欢迎来自' . $this->option('city') . '的' . $this->argument('name') .'xxx!');
}
用户交互
除了在命令行运行命令时手动设置参数值和选项值获取输入信息之外,Artisan 还支持通过其它方式获取用户输入,比如用户在执行命令期间通过键盘输入参数信息。这在我们的命令行应用最终是交付给客户使用的情况下非常方便,因为不同客户的输入信息是不一样的,我们不能写死,如果让客户自己输入又长又多的参数和选项又很不友好。
Laravel Artisan 提供了很多方法支持用户输入不同类型的数据。
如果输入的是普通文本的话,通过 ask() 方法即可:
$name = $this->ask('你叫什么的名字');
如果输入的是敏感信息,比如密码之类的,可以通过 secret() 方法隐藏用户输入:
$password = $this->secret('输入密码才能执行此命令');
如果需要用户确认信息,可以通过 confirm() 方法,该方法返回布尔值:
if ($this->confirm('确定要执行此命令吗?')) {
// 继续
}
有时候,我们为了方便用户快速输入,会提供自动完成提示功能,这可以通过 anticipate() 方法实现:
$city = $this->anticipate('你来自哪个城市', [
"北京",
"杭州",
"深圳"
]);
最后,还有个很常见的命令行交互方式是为用户提供选项让用户选择,这可以通过 choice() 方法实现:
$city = $this->choice('你来自哪个城市', [
'北京', '杭州', '深圳'
], 0);
进度条
如果你之前运行过 npm install,就会看到安装过程中有进度条显示安装进度,在 Artisan 命令执行过程中,也可以显示类似的进度条,实现代码如下:
$totalUnits = 10;
$this->output->progressStart($totalUnits);
$i = 0;
while ($i++ < $totalUnits) {
sleep(3);
$this->output->progressAdvance();
}