Помічник 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