如何在列中显示 "choice()" 的控制台提示?
How to display console prompt for "choice()" in columns?
在 Laravel 命令中,我正在寻找一种方法来在多列中显示 52 个选项,而不是在一个需要滚动的长列表中显示。
这可能吗?
这是我目前的代码:
do {
$i++;
$col_name[$i] = $this->ask('Column name?');
if ($col_name[$i] != null) {
$col_type[$i] = $this->choice('Column type?', [
"0" => 'bigIncrements',
"1" => 'bigInteger',
"2" => 'binary',
"3" => 'boolean',
"4" => 'char',
"5" => 'date',
"6" => 'dateTime',
"7" => 'dateTimeTz',
"8" => 'decimal',
...
"51" => 'uuid',
"52" => 'year'
], 'string');
}
} while ($col_name[$i] != null);
Laravel 内部使用 Symfony Console component, and specifically the SymfonyStyle
and QuestionHelper
classes.
因为这些目前只支持打印 "choice" 类型输入的列表,你不能让它打印 table.
您可以做的是将其混合一点,使用一种表示方式来表示选项,并使用不同的助手来获取用户输入。
也就是说,打印一个包含所有选项的 table,然后给用户一个自动完成输入以选择其中一个。
例如:
$options = [
'bigIncrements',
'bigInteger',
'binary',
'boolean',
'char',
'date',
'dateTime',
'dateTimeTz',
'decimal',
// ...
'uuid',
'year'
];
$rows = array_chunk($options, 6);
$headers = ['Opt 1', 'Opt 2', 'Opt 3', 'Opt 4', 'Opt 5', 'Opt 6'];
$this->table($headers, $rows);
$columnType = $name = $this->anticipate('Column Type?', $options);
我使用 header 和 "Opt X"
的假 header 只是因为 Laravel 辅助方法给你的选择比直接使用 Symfony 组件少,但我想他们会做捏.
在 Laravel 命令中,我正在寻找一种方法来在多列中显示 52 个选项,而不是在一个需要滚动的长列表中显示。
这可能吗?
这是我目前的代码:
do {
$i++;
$col_name[$i] = $this->ask('Column name?');
if ($col_name[$i] != null) {
$col_type[$i] = $this->choice('Column type?', [
"0" => 'bigIncrements',
"1" => 'bigInteger',
"2" => 'binary',
"3" => 'boolean',
"4" => 'char',
"5" => 'date',
"6" => 'dateTime',
"7" => 'dateTimeTz',
"8" => 'decimal',
...
"51" => 'uuid',
"52" => 'year'
], 'string');
}
} while ($col_name[$i] != null);
Laravel 内部使用 Symfony Console component, and specifically the SymfonyStyle
and QuestionHelper
classes.
因为这些目前只支持打印 "choice" 类型输入的列表,你不能让它打印 table.
您可以做的是将其混合一点,使用一种表示方式来表示选项,并使用不同的助手来获取用户输入。
也就是说,打印一个包含所有选项的 table,然后给用户一个自动完成输入以选择其中一个。
例如:
$options = [
'bigIncrements',
'bigInteger',
'binary',
'boolean',
'char',
'date',
'dateTime',
'dateTimeTz',
'decimal',
// ...
'uuid',
'year'
];
$rows = array_chunk($options, 6);
$headers = ['Opt 1', 'Opt 2', 'Opt 3', 'Opt 4', 'Opt 5', 'Opt 6'];
$this->table($headers, $rows);
$columnType = $name = $this->anticipate('Column Type?', $options);
我使用 header 和 "Opt X"
的假 header 只是因为 Laravel 辅助方法给你的选择比直接使用 Symfony 组件少,但我想他们会做捏.