andydefer/php-console
Composer 安装命令:
composer require andydefer/php-console
包简介
A simple and elegant console output writer for PHP with styled components
README 文档
README
Un package d'écriture console élégant et fluide pour PHP avec des composants stylisés.
Table des matières
- Installation
- Concepts fondamentaux
- Démarrage rapide
- Messages stylisés
- Alertes
- Tableaux
- Tableau adaptatif
- Listes
- Clés → Valeurs
- Liens
- Badges
- Métriques
- Colonnes
- Timeline
- Arborescence (Tree)
- JSON Viewer
- Barre de progression
- Spinner
- Logger
- Notifications
- Sons
- Saisies utilisateur
- Formulaire
- Buffer et affichage différé
- VirtualTerminalService
- Référence complète des méthodes
- Exemples complets
- Licence
Installation
composer require andy-defer/php-console-writer
Prérequis
- PHP 8.0 ou supérieur
- Dépendance :
andydefer/php-vo: ^0.10.0
Concepts fondamentaux
Architecture
Le package repose sur une architecture fluide en couches :
Console (API principale)
├── Renderable (Messages, Titres, Alertes)
├── StyledComponents (Badge, Metric, Columns, Timeline, Tree, JSON)
├── Interactive (Ask, Confirm, Choice, Suggest, Number, MultiChoice)
├── Progress (ProgressBar, Spinner)
└── System (Logger, Notification, Sound)
Principe clé
Tout est conçu pour le chaînage fluide :
$console ->title('Dashboard') ->line() ->info('Chargement...') ->success('Terminé !') ->render();
Démarrage rapide
<?php require_once 'vendor/autoload.php'; use AndyDefer\ConsoleWriter\Console\Console; $console = new Console(); $console ->title('🎨 Mon Application') ->line() ->info('Bienvenue dans la démonstration') ->success('✅ Opération réussie !') ->error('❌ Erreur de connexion') ->alert('⚠️ Attention, une action est requise') ->line() ->badgeSuccess('OK') ->link('https://github.com', 'Voir le projet') ->render();
Messages stylisés
Types de messages
// Information (bleu) $console->info('Chargement en cours...'); // Succès (vert) $console->success('✅ Opération terminée avec succès'); // Erreur (rouge avec fond) $console->error('❌ Erreur : impossible de se connecter'); // Alerte (encadrée jaune) $console->alert('⚠️ Redis est hors ligne !'); // Titre (encadré cyan gras) $console->title('📊 Dashboard Système');
Rendu
ℹ️ Chargement en cours...
✅ Opération terminée avec succès
ERROR ❌ Erreur : impossible de se connecter
┌─────────────────────────────────────┐
│ ⚠️ Redis est hors ligne ! │
└─────────────────────────────────────┘
╔══════════════════════════╗
║ 📊 Dashboard Système ║
╚══════════════════════════╝
Alertes
Alertes prédéfinies
$console ->alertSuccess('✅ Déploiement réussi !') ->alertError('❌ Erreur critique détectée') ->alertWarning('⚠️ Attention, espace disque faible') ->alertInfo('ℹ️ Mise à jour disponible');
Alertes personnalisées
// Avec icône personnalisée $console->alertWithIcon('Nouveau message reçu', '📬'); // Avec couleur personnalisée $console->alertWithColor('Alerte rouge !', 'red', 6); // Avec bordure personnalisée $console->alertWithBorder('Important !', '=', 'magenta', 8); // Avec icône et couleur personnalisées $console->alertWithIconAndColor('🎉 Félicitations !', '🎉', 'green', 6); // Version complète avec tous les paramètres $console->alertFull('Message complet', '🚀', 'cyan', '═', 6);
Toutes les méthodes d'Alert
| Méthode | Description | Exemple |
|---|---|---|
alertSuccess(string $message) |
Alerte de succès (✅ vert) | $console->alertSuccess('OK') |
alertError(string $message) |
Alerte d'erreur (❌ rouge) | $console->alertError('KO') |
alertWarning(string $message) |
Alerte d'avertissement (⚠️ jaune) | $console->alertWarning('WARN') |
alertInfo(string $message) |
Alerte d'information (ℹ️ bleu) | $console->alertInfo('INFO') |
alertWithIcon(string $message, string $icon, int $padding) |
Alerte avec icône | $console->alertWithIcon('Message', '📬') |
alertWithColor(string $message, string $color, int $padding) |
Alerte avec couleur | $console->alertWithColor('Message', 'red') |
alertWithIconAndColor(string $message, string $icon, string $color, int $padding) |
Alerte avec icône et couleur | $console->alertWithIconAndColor('Message', '📬', 'red') |
alertWithBorder(string $message, string $borderChar, string $color, int $padding) |
Alerte avec bordure | $console->alertWithBorder('Message', '=', 'cyan') |
alertFull(string $message, string $icon, string $color, string $borderChar, int $padding) |
Alerte complète | $console->alertFull('Message', '🚀', 'cyan', '═', 6) |
Tableaux
Tableau basique (2-5 colonnes)
$console->table( ['Service', 'Status', 'Port', 'Version'], [ ['PHP-FPM', '✅ Running', '9000', '8.2.15'], ['MySQL', '✅ Running', '3306', '8.0.35'], ['Redis', '❌ Failed', '6379', '7.2.4'], ['Nginx', '✅ Running', '80', '1.24.0'], ] );
Rendu
┌────────────────────────────────────────────────────────────┐
│ Service │ Status │ Port │ Version │
├────────────────────────────────────────────────────────────┤
│ PHP-FPM │ ✅ Running │ 9000 │ 8.2.15 │
│ MySQL │ ✅ Running │ 3306 │ 8.0.35 │
│ Redis │ ❌ Failed │ 6379 │ 7.2.4 │
│ Nginx │ ✅ Running │ 80 │ 1.24.0 │
└────────────────────────────────────────────────────────────┘
Avec ListCollection
use AndyDefer\DomainStructures\Utils\ListCollection; $headers = ListCollection::from(['Product', 'Price', 'Stock']); $rows = ListCollection::from([ ListCollection::from(['Laptop', '999.99', '15']), ListCollection::from(['Mouse', '29.99', '42']), ]); $console->table($headers, $rows);
Tableau adaptatif
Le composant AdaptiveTable détecte automatiquement le nombre de colonnes :
- ≤ 5 colonnes → affichage en tableau
- > 5 colonnes → affichage en liste KeyValue
$console->adaptiveTable( ['Service', 'Status', 'Port', 'Version', 'Uptime', 'Memory'], [ ['PHP-FPM', '✅ Running', '9000', '8.2.15', '72h', '128 MB'], ['MySQL', '✅ Running', '3306', '8.0.35', '168h', '512 MB'], ] );
Rendu pour > 5 colonnes
📋 6 colonnes → affichage en liste
┌─ Item #1 ──────────────────────────────────────────────
Service : PHP-FPM
Status : ✅ Running
Port : 9000
Version : 8.2.15
Uptime : 72h
Memory : 128 MB
└────────────────────────────────────────────────────────
Listes
Styles disponibles
use AndyDefer\ConsoleWriter\Console\Enums\ListStyle; $items = ['Item 1', 'Item 2', 'Item 3']; // Puces (•) $console->list($items, ListStyle::BULLET); // Flèches (→) $console->list($items, ListStyle::ARROW); // Tiret (—) $console->list($items, ListStyle::DASH); // Numérotée (1.) $console->list($items, ListStyle::NUMBER); // Alphabétique (a.) $console->list($items, ListStyle::ALPHA); // Romain (i.) $console->list($items, ListStyle::ROMAN); // Check (✓) $console->list($items, ListStyle::CHECK); // Croix (✗) $console->list($items, ListStyle::CROSS); // Étoile (★) $console->list($items, ListStyle::STAR);
Liste colorée
$console->listColored( ['✅ Tâche terminée', '✅ Tests passés'], ListStyle::CHECK, 'green' ); $console->listColored( ['❌ Échec du build'], ListStyle::CROSS, 'red' );
Avec indentation
$console->list( ['Sous-item 1', 'Sous-item 2'], ListStyle::BULLET, 2 // Indentation de 2 niveaux );
Clés → Valeurs
$console->keyValue([ 'Nom' => 'Jean Dupont', 'Âge' => 42, 'Ville' => 'Paris 🇫🇷', ]); $console->keyValueWithColor(['CPU' => '45%'], 'yellow'); $console->keyValueWithValueColor(['Status' => 'OK'], 'green'); $console->keyValueWithSeparator(['Nom' => 'Jean'], ' → ');
Rendu
Nom : Jean Dupont
Âge : 42
Ville : Paris 🇫🇷
CPU : 45% (clés en jaune)
Status : OK (valeurs en vert)
Nom → Jean (séparateur personnalisé)
Liens
Liens cliquables (OSC 8)
$console->link('https://github.com/andydefer/php-console-writer'); $console->link('https://github.com', '📦 Voir le projet sur GitHub');
Avec icône
use AndyDefer\ConsoleWriter\Console\Components\Link; echo Link::renderWithIcon( 'https://packagist.org/packages/andy-defer/php-console-writer', 'Packagist', '📦' );
Avec couleur personnalisée
echo Link::renderWithColor( 'https://github.com/andydefer/php-console-writer', 'GitHub Repository', 'magenta' );
Avec soulignement
echo Link::renderWithUnderline( 'https://example.com', 'Example', 'green' );
Badges
Badges prédéfinis
$console ->badgeSuccess('SUCCESS') ->badgeDanger('FAILED') ->badgeWarning('PENDING') ->badgeInfo('INFO') ->badgePrimary('PRIMARY') ->badgeDark('DARK') ->badgeLight('LIGHT');
Avec icône
$console->badgeWithIcon('Déploiement', '🚀', 'success');
Badge personnalisé
$console->badge('PERSONNALISÉ', 'custom'); // Ajouter un style personnalisé Badge::addStyle('custom', 'magenta', '💜', 'CUSTOM');
Rendu
[SUCCESS] (vert)
[FAILED] (rouge)
[PENDING] (jaune)
[INFO] (bleu)
[PRIMARY] (cyan)
🚀 [DÉPLOIEMENT] (vert avec icône)
[PERSONNALISÉ] (magenta)
Métriques
// Métrique simple $console->metric('CPU', '45%', 'yellow'); // Avec icône $console->metricWithIcon('RAM', '8.2 GB', '💾', 'green'); // Avec tendance $console->metricWithTrend('CPU', '45%', '↑ 5%', 'green'); // En ligne (compact) $console->metricInline('Uptime', '72h', 'cyan');
Rendu
CPU
45%
💾 RAM
8.2 GB
CPU
45% ↑ 5%
Uptime: 72h
Colonnes
$console->columns([ ['Users', '123'], ['Servers', '5'], ['Logs', '42'] ]); $console->columnsWithColors($columns, ['cyan', 'green', 'yellow']); $console->columnsWithHeaders($columns); $console->columnsCompact($columns);
Rendu
Users Servers Logs
123 5 42
Users Servers Logs (cyan, green, yellow)
123 5 42
┌─────────┬──────────┬─────────┐
│ Users │ Servers │ Logs │
├─────────┼──────────┼─────────┤
│ 123 │ 5 │ 42 │
└─────────┴──────────┴─────────┘
Users Servers Logs
123 5 42
Timeline
$console->timeline([ ['12:00', 'Application démarrée', 'Service web initialisé'], ['12:01', 'Connexion DB', 'Connexion établie en 45ms'], ['12:02', 'Serveur prêt', 'En attente des requêtes'], ]); $console->timelineWithStatus($events, ['success', 'warning', 'error']);
Rendu
● 12:00 Application démarrée
Service web initialisé
│
● 12:01 Connexion DB
Connexion établie en 45ms
│
● 12:02 Serveur prêt
En attente des requêtes
✅ 12:00 Application démarrée (succès)
⚠️ 12:01 Connexion DB (warning)
❌ 12:02 Serveur prêt (error)
Arborescence (Tree)
Arbre simple
use AndyDefer\DomainStructures\Utils\MapCollection; $tree = MapCollection::from([ 'src' => MapCollection::from([ 'Console' => MapCollection::from([ 'Components' => MapCollection::from([ 'Table.php' => MapCollection::from([]), 'Tree.php' => MapCollection::from([]), ]), ]), ]), ]); $console->tree($tree, '📦 Project');
Avec couleurs
$console->treeWithColors($tree, '📦 Project', 'cyan', 'white');
Avec icônes
$console->treeWithIcons($tree, '📦 Project', '📂', '📄');
À partir de chemins (méthode la plus simple)
use AndyDefer\DomainStructures\Utils\SetCollection; $paths = SetCollection::from([ 'src/Console/Components', 'src/Console/Services', 'tests/Unit', ]); $console->treeFromPaths($paths, '📁 Project');
Rendu
📦 Project
├─ src
│ ├─ Console
│ │ ├─ Components
│ │ │ ├─ Table.php
│ │ │ └─ Tree.php
│ │ └─ Services
│ └─ Contracts
└─ tests
└─ Unit
📦 Project
├─ 📂 src
│ ├─ 📂 Console
│ │ ├─ 📂 Components
│ │ │ ├─ 📄 Table.php
│ │ │ └─ 📄 Tree.php
│ │ └─ 📂 Services
│ └─ 📂 Contracts
└─ 📂 tests
└─ 📂 Unit
JSON Viewer
$data = ['user' => ['id' => 1, 'name' => 'Andy', 'active' => true]]; $console->json($data); $console->jsonCompact($data); $console->jsonWithDepth($data, 2);
Rendu
"user": {
"id": 1, (jaune)
"name": "Andy", (vert)
"active": true (magenta)
}
{"user":{"id":1,"name":"Andy","active":true}}
"user": {
"id": 1,
"name": "Andy",
"active": true
}
Barre de progression
Barre simple
$console->progressBar(100, 40, '📦 Téléchargement'); for ($i = 0; $i < 100; $i++) { usleep(30000); $console->advance(); } $console->finish();
Styles prédéfinis
| Style | Description |
|---|---|
default |
Style par défaut |
download |
Style téléchargement |
processing |
Style traitement |
upload |
Style upload |
install |
Style installation |
cleanup |
Style nettoyage |
$console->progressBarStyled(50, 'processing', 40);
Avancement par pas
$console->progressBar(100, 40, '📊 Chargement'); for ($i = 0; $i < 10; $i++) { usleep(100000); $console->advance(10); // Avance de 10% à chaque étape } $console->finish();
Spinner
Tâche simple
$console->spinner('Connexion à Redis...', function($spinner) { sleep(3); $spinner->success('Connecté'); });
Avec erreur
$console->spinner('Connexion à Redis...', function($spinner) { sleep(2); $spinner->error('Connexion échouée'); });
Avec changement de message
$console->spinner('Étape 1 : Analyse...', function($spinner) { sleep(1); $spinner->setMessage('Étape 2 : Téléchargement...'); sleep(1); $spinner->setMessage('Étape 3 : Installation...'); sleep(1); $spinner->success('Installation terminée !'); });
Attente conditionnelle
$counter = 0; $console->spinnerWait('En attente du service...', function() use (&$counter) { $counter++; return $counter >= 5; }); $console->success('✅ Service prêt !');
Logger
Niveaux de logs
$console ->logInfo('Chargement...') ->logSuccess('✅ Terminé') ->logError('❌ Erreur') ->logWarning('⚠️ Attention') ->logDebug('Debug info') ->logNotice('Maintenance programmée') ->logCritical('Service hors ligne !');
Format personnalisé
use AndyDefer\ConsoleWriter\Console\Components\Logger; Logger::setTimeFormat('Y-m-d H:i:s'); echo Logger::info('Format Y-m-d H:i:s'); // Restaurer le format par défaut Logger::setTimeFormat('H:i:s');
Log personnalisé
echo Logger::log('CUSTOM', 'Message personnalisé', 'magenta');
Rendu
[14:30:00] INFO - Chargement...
[14:30:01] SUCCESS - ✅ Terminé
[14:30:02] ERROR - ❌ Erreur
[14:30:03] WARNING - ⚠️ Attention
[14:30:04] DEBUG - Debug info
[14:30:05] NOTICE - Maintenance programmée
[14:30:06] CRITICAL - Service hors ligne !
[14:30:07] CUSTOM - Message personnalisé
Notifications
$console ->notifySuccess('Déploiement réussi') ->notifyError('Erreur critique') ->notifyWarning('Cache à nettoyer') ->notifyInfo('Nouvelle mise à jour');
Rendu
🔔 Déploiement réussi (vert)
🔔 Erreur critique (rouge)
🔔 Cache à nettoyer (jaune)
🔔 Nouvelle mise à jour (bleu)
Sons
$console->soundSuccess(); // Son de succès $console->soundError(); // Son d'erreur $console->soundInfo(); // Son d'information // Son personnalisé $console->sound(SoundType::SUCCESS); // Son asynchrone (ne bloque pas) $console->soundAsync(SoundType::SUCCESS);
Saisies utilisateur
Ask - Saisie simple
$name = $console->ask('Quel est votre nom ?'); $city = $console->ask('Ville ?', 'Paris'); // Valeur par défaut $color = $console->ask('Couleur ?', null, 'yellow'); // Couleur personnalisée
Secret - Mot de passe masqué
$password = $console->secret('Mot de passe :'); $apiKey = $console->secret('Clé API :', 'yellow');
Confirm - Oui/Non
if ($console->confirm('Voulez-vous continuer ?', true)) { // Oui } else { // Non } // Avec couleur personnalisée if ($console->confirm('Accepter ?', true, 'yellow')) { // Oui }
Choice - Choix unique
$lang = $console->choice( 'Choisissez votre langage :', ['PHP', 'JavaScript', 'Python', 'Go'], 0 // Index par défaut ); // Avec couleur personnalisée $lang = $console->choice('Langage :', $options, null, 'yellow');
Suggest - Autocomplétion
$colors = ['red', 'green', 'blue', 'yellow']; $color = $console->suggest('Choisissez une couleur :', $colors);
Number - Saisie numérique
$age = $console->number('Âge :', 0, 150); // Min 0, Max 150 $score = $console->number('Score :', 0, 100); // Avec validation $quantity = $console->number('Quantité :', 1); // Min 1
ConfirmWithTimeout - Confirmation avec délai
$console->info('⏳ Vous avez 5 secondes pour répondre...'); $result = $console->confirmWithTimeout( 'Confirmer l\'opération ?', 5, // Timeout en secondes true // Valeur par défaut si timeout );
MultiChoice - Sélection multiple
$selected = $console->multiChoice( 'Choisissez vos langages préférés :', ['PHP', 'JavaScript', 'Python', 'Go'], ['PHP', 'JavaScript'] // Sélectionnés par défaut );
Formulaire
$answers = $console->form() ->title('📝 Formulaire d\'inscription') ->line() ->ask('Nom complet :', 'name', null, 'yellow') ->ask('Email :', 'email', null, 'cyan') ->number('Âge :', 'age', 1, 120) ->secret('Mot de passe :', 'password') ->confirm('Newsletter ?', 'newsletter', true) ->choice('Langage :', 'lang', ['PHP', 'JavaScript', 'Python']) ->multiChoice('Frameworks :', 'frameworks', ['Laravel', 'React'], ['Laravel']) ->summaryTable('📊 Récapitulatif') ->submit(); $console->title('📊 Réponses'); $console->line(); $console->keyValueWithValueColor([ 'Nom' => $answers->get('name'), 'Email' => $answers->get('email'), 'Âge' => $answers->get('age'), 'Newsletter' => $answers->get('newsletter') ? '✅ Oui' : '❌ Non', 'Langage' => $answers->get('lang'), 'Frameworks' => implode(', ', $answers->get('frameworks')), ], 'green');
Méthodes du formulaire
| Méthode | Description | Exemple |
|---|---|---|
title(string $title) |
Titre du formulaire | ->title('📝 Inscription') |
line() |
Saut de ligne | ->line() |
ask(string $question, string $key, string $default, string $color) |
Saisie texte | ->ask('Nom :', 'name', null, 'yellow') |
secret(string $question, string $key, string $color) |
Mot de passe | ->secret('Mot de passe :', 'password') |
confirm(string $question, string $key, bool $default) |
Oui/Non | ->confirm('Newsletter ?', 'newsletter', true) |
number(string $question, string $key, int $min, int $max, int $default) |
Saisie numérique | ->number('Âge :', 'age', 1, 120) |
choice(string $question, string $key, array $options, int $default) |
Choix unique | ->choice('Langage :', 'lang', ['PHP', 'JS']) |
multiChoice(string $question, string $key, array $options, array $selected) |
Choix multiple | ->multiChoice('Frameworks :', 'frameworks', ['Laravel', 'React']) |
summaryTable(string $title) |
Tableau récapitulatif | ->summaryTable('📊 Récapitulatif') |
submit() |
Récupère les réponses | ->submit() |
Buffer
$console ->startBuffer() ->info('Ligne 1') ->info('Ligne 2') ->info('Ligne 3') ->render(); // Affiche tout d'un coup
Méthodes de gestion du buffer
// Démarrer le buffer $console->startBuffer(); // Ajouter des lignes $console->info('Test 1'); $console->info('Test 2'); // Récupérer les lignes sans afficher $lines = $console->getLines(); // ['Test 1', 'Test 2'] // Vider le buffer sans afficher $console->clear(); // Afficher et vider le buffer $console->render(); // Vérifier si le buffer est actif $isBuffered = $console->isBuffered(); // bool
VirtualTerminalService
use AndyDefer\ConsoleWriter\Console\Services\VirtualTerminalService; $vt = new VirtualTerminalService(); $vt->add('title', '<fg=cyan><options=bold>📊 Dashboard</options=bold></fg=cyan>'); $vt->add('cpu', '<fg=yellow>CPU : 45%</fg=yellow>'); $vt->add('ram', '<fg=green>RAM : 8.2 GB</fg=green>'); $vt->render(); $vt->update('cpu', '<fg=red>CPU : 85% ⚠️</fg=red>'); $vt->render();
Rendu
📊 Dashboard (cyan gras)
CPU : 45% (jaune)
RAM : 8.2 GB (vert)
📊 Dashboard (cyan gras)
CPU : 85% ⚠️ (rouge)
RAM : 8.2 GB (vert)
Référence complète des méthodes
Console
| Méthode | Description | Exemple |
|---|---|---|
| Messages | ||
info(string $message) |
Message d'information (bleu) | $console->info('Chargement...') |
success(string $message) |
Message de succès (vert) | $console->success('Terminé !') |
error(string $message) |
Message d'erreur (rouge) | $console->error('Erreur !') |
title(string $message) |
Titre encadré (cyan) | $console->title('Dashboard') |
| Alertes | ||
alert(string $message) |
Alerte encadrée (jaune) | $console->alert('Attention !') |
alertSuccess(string $message) |
Alerte de succès (✅ vert) | $console->alertSuccess('OK') |
alertError(string $message) |
Alerte d'erreur (❌ rouge) | $console->alertError('KO') |
alertWarning(string $message) |
Alerte d'avertissement (⚠️ jaune) | $console->alertWarning('WARN') |
alertInfo(string $message) |
Alerte d'information (ℹ️ bleu) | $console->alertInfo('INFO') |
alertWithIcon(string $message, string $icon, int $padding) |
Alerte avec icône | $console->alertWithIcon('Message', '📬') |
alertWithColor(string $message, string $color, int $padding) |
Alerte avec couleur | $console->alertWithColor('Message', 'red') |
alertWithBorder(string $message, string $border, string $color, int $padding) |
Alerte avec bordure | $console->alertWithBorder('Message', '=') |
alertWithIconAndColor(string $message, string $icon, string $color, int $padding) |
Alerte avec icône et couleur | $console->alertWithIconAndColor('Message', '📬', 'red') |
alertFull(string $message, string $icon, string $color, string $border, int $padding) |
Alerte complète | $console->alertFull('Message', '🚀', 'cyan', '═', 6) |
| Tableaux | ||
table($headers, $rows) |
Tableau formaté | $console->table(['A'], [['1']]) |
adaptiveTable($headers, $rows) |
Tableau ou liste auto | $console->adaptiveTable($h, $r) |
| Listes | ||
list($items, ListStyle, int $indent) |
Liste à puces | $console->list(['A'], BULLET) |
listColored($items, ListStyle, string $color) |
Liste colorée | $console->listColored(['A'], BULLET, 'green') |
| KeyValue | ||
keyValue($data, int $indent) |
Clés → valeurs | $console->keyValue(['A'=>'1']) |
keyValueWithColor($data, string $color, int $indent) |
Clés colorées | $console->keyValueWithColor($d, 'yellow') |
keyValueWithValueColor($data, string $color, int $indent) |
Valeurs colorées | $console->keyValueWithValueColor($d, 'green') |
keyValueWithSeparator($data, string $separator, int $indent) |
Séparateur | $console->keyValueWithSeparator($d, ' → ') |
| Arbres | ||
tree(MapCollection $tree, string $root) |
Arbre | $console->tree($tree, 'Root') |
treeWithColors($tree, $root, $nodeColor, $leafColor) |
Arbre avec couleurs | $console->treeWithColors($tree, 'Root', 'green', 'yellow') |
treeWithIcons($tree, $root, $folderIcon, $fileIcon) |
Arbre avec icônes | $console->treeWithIcons($tree, 'Root', '📂', '📄') |
treeFromPaths(SetCollection $paths, string $root) |
Arbre à partir de chemins | $console->treeFromPaths($paths, 'Project') |
| Liens | ||
link(string $url, ?string $text) |
Lien cliquable | $console->link('https://...') |
| Badges | ||
badge(string $text, string $style) |
Badge personnalisé | $console->badge('OK', 'success') |
badgeWithIcon(string $text, string $icon, string $style) |
Badge avec icône | $console->badgeWithIcon('OK', '✅', 'success') |
badgeSuccess(string $text) |
Badge succès | $console->badgeSuccess('OK') |
badgeDanger(string $text) |
Badge danger | $console->badgeDanger('KO') |
badgeWarning(string $text) |
Badge avertissement | $console->badgeWarning('WARN') |
badgeInfo(string $text) |
Badge information | $console->badgeInfo('INFO') |
badgePrimary(string $text) |
Badge primaire | $console->badgePrimary('PRIMARY') |
| Métriques | ||
metric(string $label, string $value, string $color) |
Métrique | $console->metric('CPU', '45%') |
metricWithIcon(string $label, string $value, string $icon, string $color) |
Métrique avec icône | $console->metricWithIcon('CPU', '45%', '💻') |
metricWithTrend(string $label, string $value, string $trend, string $trendColor, string $valueColor) |
Métrique avec tendance | $console->metricWithTrend('CPU', '45%', '↑ 5%') |
metricInline(string $label, string $value, string $color) |
Métrique en ligne | $console->metricInline('CPU', '45%') |
| Colonnes | ||
columns($columns, int $width, string $separator) |
Colonnes | $console->columns($columns) |
columnsWithColors($columns, array $colors, int $width, string $separator) |
Colonnes avec couleurs | $console->columnsWithColors($columns, ['cyan', 'green']) |
columnsWithHeaders($columns, int $width, string $separator) |
Colonnes avec en-têtes | $console->columnsWithHeaders($columns) |
columnsCompact($columns, string $separator) |
Colonnes compactes | $console->columnsCompact($columns) |
| Timeline | ||
timeline($events, string $color) |
Timeline | $console->timeline($events) |
timelineWithColors($events, array $colors) |
Timeline avec couleurs | $console->timelineWithColors($events, ['green', 'red']) |
timelineWithIcons($events, string $icon, string $color) |
Timeline avec icônes | $console->timelineWithIcons($events, '★') |
timelineWithStatus($events, array $statuses) |
Timeline avec statuts | $console->timelineWithStatus($events, ['success', 'error']) |
| JSON | ||
json(array|string $data) |
JSON formaté | $console->json($data) |
jsonCompact(array|string $data) |
JSON compact | $console->jsonCompact($data) |
jsonWithDepth(array|string $data, int $depth) |
JSON avec profondeur | $console->jsonWithDepth($data, 2) |
| Progression | ||
progressBar(int $total, int $width, string $prefix, string $suffix) |
Barre de progression | $console->progressBar(100, 50, 'Download') |
progressBarStyled(int $total, string $style, int $width) |
Barre avec style | $console->progressBarStyled(100, 'download') |
advance(int $steps) |
Avancer la barre | $console->advance(10) |
finish() |
Terminer la barre | $console->finish() |
spinner(string $message, callable $task, string $prefix, string $suffix) |
Spinner | $console->spinner('Loading...', fn($s) => sleep(2)) |
spinnerWait(string $message, callable $isComplete, string $prefix, string $suffix) |
Spinner en attente | $console->spinnerWait('Waiting...', fn() => $done) |
| Logger | ||
logInfo(string $message) |
Log INFO (bleu) | $console->logInfo('Message') |
logSuccess(string $message) |
Log SUCCESS (vert) | $console->logSuccess('OK') |
logError(string $message) |
Log ERROR (rouge) | $console->logError('KO') |
logWarning(string $message) |
Log WARNING (jaune) | $console->logWarning('WARN') |
logDebug(string $message) |
Log DEBUG (gris) | $console->logDebug('Debug') |
logNotice(string $message) |
Log NOTICE (cyan) | $console->logNotice('Notice') |
logCritical(string $message) |
Log CRITICAL (magenta) | $console->logCritical('Critical') |
log(string $level, string $message, string $color) |
Log personnalisé | $console->log('CUSTOM', 'Message', 'magenta') |
| Notifications | ||
notify(string $message, string $type, string $icon) |
Notification | $console->notify('Message', 'success') |
notifySuccess(string $message) |
Notification succès | $console->notifySuccess('OK') |
notifyError(string $message) |
Notification erreur | $console->notifyError('KO') |
notifyWarning(string $message) |
Notification avertissement | $console->notifyWarning('WARN') |
notifyInfo(string $message) |
Notification information | $console->notifyInfo('INFO') |
| Sons | ||
soundSuccess() |
Son de succès | $console->soundSuccess() |
soundError() |
Son d'erreur | $console->soundError() |
soundInfo() |
Son d'information | $console->soundInfo() |
sound(SoundType $type) |
Son personnalisé | $console->sound(SoundType::SUCCESS) |
soundAsync(SoundType $type) |
Son asynchrone | $console->soundAsync(SoundType::SUCCESS) |
| Saisies | ||
ask(string $question, ?string $default, string $color) |
Saisie texte | $console->ask('Nom :') |
secret(string $question, string $color) |
Mot de passe | $console->secret('Mot de passe :') |
confirm(string $question, bool $default, string $color) |
Oui/Non | $console->confirm('Continuer ?') |
choice(string $question, array $choices, ?int $default, string $color) |
Choix unique | $console->choice('Langage :', ['PHP', 'JS']) |
suggest(string $question, array $suggestions, string $color) |
Autocomplétion | $console->suggest('Couleur :', ['red', 'blue']) |
number(string $question, ?int $min, ?int $max, ?int $default, string $color) |
Saisie numérique | $console->number('Âge :', 1, 120) |
confirmWithTimeout(string $question, int $timeout, bool $default, string $color) |
Confirmation avec délai | $console->confirmWithTimeout('Continuer ?', 5) |
multiChoice(string $question, array $options, array $selected, string $color) |
Sélection multiple | $console->multiChoice('Langages :', ['PHP', 'JS']) |
form() |
Formulaire | $console->form()->ask(...)->submit() |
| Utilitaires | ||
line(string $message) |
Ligne simple | $console->line('Texte') |
newLine(int $count) |
Saut de ligne | $console->newLine(2) |
space(int $count) |
Espaces | $console->space(2) |
raw(string $line) |
Ligne brute | $console->raw('<fg=green>Texte</fg=green>') |
ansi(string $text) |
Texte avec balises ANSI | $console->ansi('<fg=green>...') |
| Buffer | ||
startBuffer() |
Démarrer le buffer | $console->startBuffer() |
render() |
Afficher le buffer | $console->render() |
clear() |
Vider le buffer | $console->clear() |
getLines(): array |
Récupérer les lignes | $lines = $console->getLines() |
isBuffered(): bool |
Vérifier le buffer | $console->isBuffered() |
Exemples complets
Exemple 1 : Dashboard système
<?php require_once 'vendor/autoload.php'; use AndyDefer\ConsoleWriter\Console\Console; use AndyDefer\ConsoleWriter\Console\Enums\ListStyle; use AndyDefer\DomainStructures\Utils\MapCollection; $console = new Console(); $console ->title('📊 Dashboard Système') ->line() ->keyValueWithValueColor( MapCollection::from([ 'Serveur' => 'Production - Web01', 'PHP' => '8.2.15', 'MySQL' => '8.0.35', 'Redis' => '7.2.4', 'Uptime' => '72h 34m 12s', 'Charge CPU' => '45%', 'Mémoire' => '8.2 / 16.0 Go', 'Disque' => '256 / 512 Go', 'Requêtes/s' => '1 234', ]), 'green' ) ->line() ->table( ['Service', 'Status', 'Port', 'Version'], [ ['PHP-FPM', '✅ Running', '9000', '8.2.15'], ['MySQL', '✅ Running', '3306', '8.0.35'], ['Redis', '❌ Failed', '6379', '7.2.4'], ['Nginx', '✅ Running', '80', '1.24.0'], ] ) ->line() ->listColored( ['Services en ligne : PHP-FPM, MySQL, Nginx'], ListStyle::CHECK, 'green' ) ->listColored( ['Services hors ligne : Redis'], ListStyle::CROSS, 'red' ) ->line() ->alert('⚠️ Redis est hors ligne. Vérifiez la configuration.') ->line() ->success('✅ Dashboard chargé avec succès !') ->render();
Exemple 2 : Script de déploiement
<?php require_once 'vendor/autoload.php'; use AndyDefer\ConsoleWriter\Console\Console; $console = new Console(); $console ->title('🚀 Script de déploiement') ->line() ->logInfo('Démarrage du déploiement...') ->logDebug('Vérification des prérequis...') ->logSuccess('✅ Prérequis vérifiés') ->logInfo('Téléchargement des sources...') ->logSuccess('✅ Sources téléchargées (2.4 MB)') ->logInfo('Installation des dépendances...') ->logWarning('⚠️ Certaines dépendances sont obsolètes') ->logSuccess('✅ Déploiement terminé !') ->render();
Exemple 3 : Formulaire interactif complet
<?php require_once 'vendor/autoload.php'; use AndyDefer\ConsoleWriter\Console\Console; $console = new Console(); $answers = $console->form() ->title('📝 Formulaire d\'inscription') ->line() ->ask('Nom complet :', 'name', null, 'yellow') ->ask('Email :', 'email', null, 'cyan') ->number('Âge :', 'age', 1, 120) ->secret('Mot de passe :', 'password') ->confirm('S\'abonner à la newsletter ?', 'newsletter', true) ->choice('Langage préféré :', 'lang', ['PHP', 'JavaScript', 'Python', 'Go'], null, 'green') ->multiChoice( 'Choisissez vos hobbies :', 'hobbies', ['Lecture', 'Sport', 'Musique', 'Voyage'], ['Lecture', 'Musique'], 'magenta' ) ->summaryTable('📊 Récapitulatif du formulaire') ->submit(); $console->line(); $console->title('📊 Réponses'); $console->line(); $console->keyValueWithValueColor([ 'Nom' => $answers->get('name'), 'Email' => $answers->get('email'), 'Âge' => $answers->get('age'), 'Mot de passe' => '••••••••', 'Newsletter' => $answers->get('newsletter') ? '✅ Oui' : '❌ Non', 'Langage' => $answers->get('lang'), 'Hobbies' => implode(', ', $answers->get('hobbies')), ], 'green'); $console->line(); $console->success('✅ Formulaire complété avec succès !'); $console->render();
Exemple 4 : Dashboard dynamique avec VirtualTerminalService
<?php require_once 'vendor/autoload.php'; use AndyDefer\ConsoleWriter\Console\Services\VirtualTerminalService; $vt = new VirtualTerminalService(); $vt->add('title', '<fg=cyan><options=bold>📊 Monitoring en temps réel</options=bold></fg=cyan>'); $vt->add('separator', '<fg=gray>─────────────────────────────────</fg=gray>'); $vt->add('cpu', '<fg=yellow>CPU : 0%</fg=yellow>'); $vt->add('ram', '<fg=green>RAM : 0%</fg=green>'); $vt->add('disk', '<fg=blue>DISQUE : 0%</fg=blue>'); $vt->add('status', '<fg=yellow>⏳ En attente de données...</fg=yellow>'); $vt->render(); // Simulation de mise à jour sleep(1); $vt->update('cpu', '<fg=yellow>CPU : 45%</fg=yellow>'); $vt->update('ram', '<fg=green>RAM : 65%</fg=green>'); $vt->update('disk', '<fg=blue>DISQUE : 32%</fg=blue>'); $vt->update('status', '<fg=green>✅ Système OK</fg=green>'); $vt->render();
Licence
MIT © Andy Defer
统计信息
- 总下载量: 2
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 18
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-06-25