Помощник Tree
Помощник Tree
Помощник Tree позволяет вам строить и отображать древоподобные структуры в консоли. Он часто используется для отображения иерархий каталогов, но вы также можете использовать его для отображения любого древоподобного содержания, такого как организационные схемы, деревья категорий продуктов, таксономмй и т.д.
7.3
Класс TreeHelper
был представлен в Symfony 7.3.
Отображение дерева
Метод createTree() создает древовидную структуру из массива и возвращает объект Tree, который можно отобразить в консоли.
Отображение дерева из массива
Вы можете построить дерево из массива, передав массив методв createTree() внутри вашей команды консоли:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
namespace App\Command;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Helper\TreeHelper;
use Symfony\Component\Console\Helper\TreeNode;
use Symfony\Component\Console\Style\SymfonyStyle;
#[AsCommand(name: 'app:my-command', description: '...')]
class MyCommand
{
// ...
public function __invoke(SymfonyStyle $io): int
{
$node = TreeNode::fromValues([
'config/',
'public/',
'src/',
'templates/',
'tests/',
]);
$tree = TreeHelper::createTree($io, $node);
$tree->render();
// ...
}
}
Этот пример выведет следующее:
1 2 3 4 5
├── config/
├── public/
├── src/
├── templates/
└── tests/
Предоставленное содержание может быть определено многомерным массивом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
$tree = TreeHelper::createTree($io, null, [
'src' => [
'Command',
'Controller' => [
'DefaultController.php',
],
'Kernel.php',
],
'templates' => [
'base.html.twig',
],
]);
$tree->render();
Код выше выведет следующее дерево:
1 2 3 4 5 6 7
├── src
│ ├── Command
│ ├── Controller
│ │ └── DefaultController.php
│ └── Kernel.php
└── templates
└── base.html.twig
Программное построение дерева
Если вы не знаете элементы дерева заранее, вы можете построить дерево программно, создав новый экземпляр калсса Tree и добавляя к нему узлы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
use Symfony\Component\Console\Helper\TreeHelper;
use Symfony\Component\Console\Helper\TreeNode;
$root = new TreeNode('my-project/');
// вы можете передать строку напрямую или создать новый объект TreeNode
$root->addChild('src/');
$root->addChild(new TreeNode('templates/'));
// создать вложенные структуры, добавив дочерние узлы к другим узлам
$testsNode = new TreeNode('tests/');
$functionalTestsNode = new TreeNode('Functional/');
$testsNode->addChild($functionalTestsNode);
$root->addChild($testsNode);
$tree = TreeHelper::createTree($io, $root);
$tree->render();
Этот пример выводит:
1 2 3 4 5
my-project/
├── src/
├── templates/
└── tests/
└── Functional/
Если вы хотите, вы можете построить массив элементов программно, а потом создать и отобразить дерево таким образом:
1 2
$tree = TreeHelper::createTree($io, null, $array);
$tree->render();
Вы также можете построить часть дерева из массива, а потом добавить другие узлы:
1 2 3 4 5
$node = TreeNode::fromValues($array);
$node->addChild('templates');
// ...
$tree = TreeHelper::createTree($io, $node);
$tree->render();
Настройка стиля дерева
Встроенные стили дерева
Помощник дерева предоставляет несколько встроенных стилей, которые вы можете использовать для настройки вывода дерева.
По умолчанию:
1
TreeHelper::createTree($io, $node, [], TreeStyle::default());
Это выводит:
1 2 3 4 5 6 7 8 9 10 11 12
├── config
│ ├── packages
│ └── routes
│ ├── framework.yaml
│ └── web_profiler.yaml
├── src
│ ├── Command
│ ├── Controller
│ │ └── DefaultController.php
│ └── Kernel.php
└── templates
└── base.html.twig
Коробка:
1
TreeHelper::createTree($io, $node, [], TreeStyle::box());
Это выводит:
1 2 3 4 5 6 7 8 9 10 11 12
┃╸ config
┃ ┃╸ packages
┃ ┗╸ routes
┃ ┃╸ framework.yaml
┃ ┗╸ web_profiler.yaml
┃╸ src
┃ ┃╸ Command
┃ ┃╸ Controller
┃ ┃ ┗╸ DefaultController.php
┃ ┗╸ Kernel.php
┗╸ templates
┗╸ base.html.twig
Двойная коробка:
1
TreeHelper::createTree($io, $node, [], TreeStyle::doubleBox());
Это выводит:
1 2 3 4 5 6 7 8 9 10 11 12
╠═ config
║ ╠═ packages
║ ╚═ routes
║ ╠═ framework.yaml
║ ╚═ web_profiler.yaml
╠═ src
║ ╠═ Command
║ ╠═ Controller
║ ║ ╚═ DefaultController.php
║ ╚═ Kernel.php
╚═ templates
╚═ base.html.twig
Компактный:
1
TreeHelper::createTree($io, $node, [], TreeStyle::compact());
Это выводит:
1 2 3 4 5 6 7 8 9 10 11 12
├ config
│ ├ packages
│ └ routes
│ ├ framework.yaml
│ └ web_profiler.yaml
├ src
│ ├ Command
│ ├ Controller
│ │ └ DefaultController.php
│ └ Kernel.php
└ templates
└ base.html.twig
Легкий:
1
TreeHelper::createTree($io, $node, [], TreeStyle::light());
Это выводит:
1 2 3 4 5 6 7 8 9 10 11 12
|-- config
| |-- packages
| `-- routes
| |-- framework.yaml
| `-- web_profiler.yaml
|-- src
| |-- Command
| |-- Controller
| | `-- DefaultController.php
| `-- Kernel.php
`-- templates
`-- base.html.twig
Минимальный:
1
TreeHelper::createTree($io, $node, [], TreeStyle::minimal());
Это выводит:
1 2 3 4 5 6 7 8 9 10 11 12
. config
. . packages
. . routes
. . framework.yaml
. . web_profiler.yaml
. src
. . Command
. . Controller
. . . DefaultController.php
. . Kernel.php
. templates
. base.html.twig
Округленный:
1
TreeHelper::createTree($io, $node, [], TreeStyle::rounded());
Это выводит:
1 2 3 4 5 6 7 8 9 10 11 12
├─ config
│ ├─ packages
│ ╰─ routes
│ ├─ framework.yaml
│ ╰─ web_profiler.yaml
├─ src
│ ├─ Command
│ ├─ Controller
│ │ ╰─ DefaultController.php
│ ╰─ Kernel.php
╰─ templates
╰─ base.html.twig
Создание пользовательского стиля дерева
Вы можете создать ваш собственный стиль дерева, передав символы конструктора класса TreeStyle:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
use Symfony\Component\Console\Helper\TreeHelper;
use Symfony\Component\Console\Helper\TreeStyle;
$customStyle = new TreeStyle('🟣 ', '🟠 ', '🔵 ', '🟢 ', '🔴 ', '🟡 ');
// Передати користувацький стиль методу createTree
$tree = TreeHelper::createTree($io, null, [
'src' => [
'Command',
'Controller' => [
'DefaultController.php',
],
'Kernel.php',
],
'templates' => [
'base.html.twig',
],
], $customStyle);
$tree->render();
Код выше выведет следующее дерево:
1 2 3 4 5 6 7
🔵 🟣 🟡 src
🔵 🟢 🟣 🟡 Command
🔵 🟢 🟣 🟡 Controller
🔵 🟢 🟢 🟠 🟡 DefaultController.php
🔵 🟢 🟠 🟡 Kernel.php
🔵 🟠 🟡 templates
🔵 🔴 🟠 🟡 base.html.twig