Symfony 7.3 introduces powerful improvements to the Console component, beyond the much-anticipated invokable commands and input attributes. This version also brings new helpers and features designed to make console applications more capable.

Markdown Tables

Alexander Menk
Contributed by Alexander Menk in #59657

The table helper lets you create complex tables with various structures and formats. In Symfony 7.3, we've introduced a new style for generating tables in Markdown format. This is useful, for example, when generating content for GitHub/GitLab issues, pull requests, CI messages, and more.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
use Symfony\Component\Console\Helper\Table;
// ...

$table = new Table($output);
$table
    ->setHeaders(['Version', 'Release Date', 'Is LTS?'])
    ->setRows([
        ['Symfony 7.0', 'November 2023', 'No'],
        // ...
        ['...', '...', '...'],
    ])
;
$table->setStyle('markdown');
$table->render();

This outputs:

1
2
3
4
5
6
7
| Version       | Release Date             | Is LTS?          |
|---------------|--------------------------|------------------|
| Symfony 7.0   | November 2023            | No               |
| Symfony 7.1   | May 2024                 | No               |
| Symfony 7.2   | November 2024            | No               |
| Symfony 7.3   | May 2025                 | No               |
| Symfony 7.4   | November 2025            | Yes              |

Tree Helper

Simon André
Contributed by Simon André in #59588

The Console component includes many helpers for rendering elements like progress bars and prompts, for controlling the cursor, etc. In Symfony 7.3, we've added a new helper for rendering tree-like structures.

This helper is typically used to render directory hierarchies but can handle any tree-like data:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use Symfony\Component\Console\Helper\TreeHelper;
use Symfony\Component\Console\Style\SymfonyStyle;
// ...

$io = new SymfonyStyle($input, $output);
$tree = TreeHelper::createTree($io, null, [
    'src' =>  [
        'Command',
        'Controller' => [
            'DefaultController.php',
        ],
        'Kernel.php',
    ],
    'templates' => [
        'base.html.twig',
    ],
]);
$tree->render();

This outputs:

1
2
3
4
5
6
7
├── src
│   ├── Command
│   ├── Controller
│   │   └── DefaultController.php
│   └── Kernel.php
└── templates
    └── base.html.twig

If you don't know the tree elements beforehand, you can build the tree programmatically:

1
2
3
4
5
6
7
use Symfony\Component\Console\Helper\TreeNode;
// ...

$node = TreeNode::fromValues(['Command', 'Controller']);
// ...
$node->addChild('templates');
$node->addChild('tests');

The tree helper provides seven built-in styles (box, double, minimal, rounded, etc.) and lets you create your own tree style.

Published in #Living on the edge