Компонент Console включает некоторые функции для вывода таблиц и их настройки различными способами. В Symfony 4.4 добавлены новые типы таблиц.
Horizontal table
Имеем следующую таблицу:
<?php
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([
// ... строки ...
])
->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()
:
<?php
use Symfony\Component\Console\Style\SymfonyStyle;
protected function execute(InputInterface $input, OutputInterface $output)
{
$io = new SymfonyStyle($input, $output);
$io->horizontalTable(
['ISBN', 'Title', 'Author'],
[
// ... строки ...
]
);
}
Definition Lists
В 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
-------------------- ---------
Оригинал статьи: https://symfony.com/blog/new-in-symfony-4-4-horizontal-tables-and-definition-lists-in-console-commands