1

在 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);
4

1 回答 1

1

Laravel 在内部使用Symfony 控制台组件,特别是SymfonyStyleQuestionHelper

由于这些当前仅支持为“选择”类型的输入打印列表,因此您无法使其打印表格。

您可以做的是将其混合一下并使用一种表示形式来表示选项,并使用不同的助手来获取用户输入。

也就是说,打印一个包含所有选项的表格,然后给用户一个自动完成输入来选择其中一个。

例如:

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

"Opt X"我只是使用的假标题是因为 Laravel 辅助方法给你的选择比直接使用 Symfony 组件要少,但我想他们会在紧要关头做。

于 2019-08-22T11:00:07.320 回答