Php 如何显示控制台提示以输入;选择();在专栏里?
在一个Laravel命令中,我正在寻找一种在多个列中显示52个选项的方法,而不是一个需要滚动的长列表 这可能吗 这是我目前掌握的代码:Php 如何显示控制台提示以输入;选择();在专栏里?,php,laravel,symfony,symfony-console,Php,Laravel,Symfony,Symfony Console,在一个Laravel命令中,我正在寻找一种在多个列中显示52个选项的方法,而不是一个需要滚动的长列表 这可能吗 这是我目前掌握的代码: do { $i++; $col_name[$i] = $this->ask('Column name?'); if ($col_name[$i] != null) { $col_type[$i] = $this->choice('Column type?', [ "0" => 'b
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);
使用内爆来促进它
$choices = [
'bigIncrements',
'bigInteger',
'binary',
'boolean',
'char',
'date',
'dateTime',
'dateTimeTz',
'decimal',
...
'uuid',
'year'
];
do {
$col_type = $this->ask("Column Type?\n". implode(', ', $choices));
} while (!in_array($col_type, $choices);
当文本到达行尾时,它将在新行中继续。Laravel在内部使用,特别是在
由于这些当前仅支持打印“选择”类型输入的列表,因此无法使其打印表格
您可以做的是,将其混合一点,并使用一种表示方式来表示选项,并使用不同的助手来获取用户输入
名义上,打印一个包含所有选项的表格,然后给用户一个自动完成输入以选择其中一个选项
例如:
我之所以使用带有“
”Opt X“
的假标题,是因为Laravel helper方法提供的选项比直接使用Symfony组件少,但我想它们会在紧要关头使用。可能是因为列意味着表,而您提供了一种在一个大而丑陋的段落中输出此内容的方法。但我只是在猜测。@Jakumi你每行要用多少个项目来输出?两个月后,它将回到线,像一个“丑陋”的混乱。
$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);