Компонент Console включает некоторые функции для вывода таблиц и их настройки различными способами. В Symfony 4.4 улучшили его с помощью новых типов таблиц.
Горизонтальные таблицы
Рассмотрим следующий пример:
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Helper\Table;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
// ...
class SomeCommand extends Command
{
public function execute(InputInterface $input, OutputInterface $output)
{
$table = new Table($output);
$table
->setHeaders(['ISBN', 'Title', 'Author'])
->setRows([
['99921-58-10-7', 'Divine Comedy', 'Dante Alighieri'],
['9971-5-0210-0', 'A Tale of Two Cities', 'Charles Dickens'],
['960-425-059-0', 'The Lord of the Rings', 'J. R. R. Tolkien'],
['80-902734-1-6', 'And Then There Were None', 'Agatha Christie'],
])
;
$table->render();
}
}
Из примера выше отобразиться такая ↓ таблица:
+---------------+--------------------------+------------------+ | ISBN | Title | Author | +---------------+--------------------------+------------------+ | 99921-58-10-7 | Divine Comedy | Dante Alighieri | | 9971-5-0210-0 | A Tale of Two Cities | Charles Dickens | | 960-425-059-0 | The Lord of the Rings | J. R. R. Tolkien | | 80-902734-1-6 | And Then There Were None | Agatha Christie | +---------------+--------------------------+------------------+
Если вы вызываете новый метод setHorizontal(bool $horizontal = true)
, таблица преобразуется в «горизонтальную таблицу», где данные отображаются в строках, а не в столбцах:
$table
->setHeaders(['ISBN', 'Title', 'Author'])
->setRows([
// ... the rows ...
])
->setHorizontal()
;
+--------+-----------------+----------------------+-----------------------+--------------------------+ | ISBN | 99921-58-10-7 | 9971-5-0210-0 | 960-425-059-0 | 80-902734-1-6 | | Title | Divine Comedy | A Tale of Two Cities | The Lord of the Rings | And Then There Were None | | Author | Dante Alighieri | Charles Dickens | J. R. R. Tolkien | Agatha Christie | +--------+-----------------+----------------------+-----------------------+--------------------------+
При использовании стилей Symfony для команд вы также можете использовать сокращенную запись при помощи метода horizontalTable()
:
use Symfony\Component\Console\Style\SymfonyStyle;
protected function execute(InputInterface $input, OutputInterface $output)
{
$io = new SymfonyStyle($input, $output);
$io->horizontalTable(
['ISBN', 'Title', 'Author'],
[
// ... the rows ...
]
);
}
Список определений
В Symfony 4.4 также добавили поддержку «списков определений», которые представляют собой набор пар ключ-значение, аналогично HTML <dl>. Списки определений Symfony более гибкие, поскольку они могут включать заголовки, разделители и т. д.
use Symfony\Component\Console\Helper\TableSeparator;
$io->definitionList(
['Version' => '4.4.0'],
['Long-Term Support' => 'Yes'],
new TableSeparator(),
'Timeline',
['End of maintenance' => '11/2022'],
['End of life' => '11/2023']
);
Этот пример выведет следующую таблицу:
-------------------- --------- Version 4.4.0 Long-Term Support Yes -------------------- --------- TIMELINE End of maintenance 11/2022 End of life 11/2023 -------------------- ---------