Umsetzen einer Fortschrittsanzeige¶
Zuerst benötigen wir eine Instanz des Terminal. Diese können wir uns über die statische Methode getInstance
besorgen.
/**
* Instanz des Terminal
*/
$terminal=\Alvine\Application\Console\Terminal::getInstance();
Das Terminal-Objekt besitzt verschiedene Methoden, die - soweit es vom Betriebssystem-Terminal unterstützt wird - zur manipulation der Ausgabe verwendet werden können.
Mit der clear
-Methode zum Beispiel lässt sich der Bildschirm leeren.
/** Bildschirm leeren*/
$terminal->clear();
Als nächstes kommt das Progress-Bar zum Einsatz. Wir erstellen eine Instanz mit einer Breite von 50 Zeichen.
$chars = 50;
/** Progressbar-Control schreiben */
$bar=new \Alvine\Application\Console\Terminal\Control\ProgressBar($terminal, $chars);
Als nächstes definieren und setzen wir den maximalen Wert der Fortschritsanzeige.
/** Maximale Anzeige */
$max=100;
$bar->init($max);
Jetzt können wir je nach anzuzeigenden Fortschritt die einzelnen Schritte - hier als Beispiel in einer Schleife - setzen.
/** Schritte setzen und anzeigen */
for($i=0; $i<=$max; $i++) {
$bar->set($i);
}
Das ganze ist noch etwas unsauber, da der Cursor weiter sichtbar ist und blinkt. Hierzu können wir den Cursor ausschalten und später wieder einschalten.
/** Cursor ausblenden */
$terminal->getCursor()->hide();
/** Cursor wieder einblenden */
$terminal->getCursor()->show();
Hier jetzt noch das vollständige Beispiel:
/**
* Instanz des Terminal
*/
$terminal=\Alvine\Application\Console\Terminal::getInstance();
/** Bildschirm leeren*/
$terminal->clear();
/** Cursor ausblenden */
$terminal->getCursor()->hide();
/** Cursor laden */
$cursor=$terminal->getCursor();
/** Entwas Abstand setzen */
$cursor->down(1);
/** Progressbar-Control schreiben */
$bar=new \Alvine\Application\Console\Terminal\Control\ProgressBar($terminal, 120);
/** Maximale Anzeige */
$max=100;
$bar->init($max);
/** Schritte setzen und anzeigen */
for($i=0; $i<=$max; $i++) {
$bar->set($i);
}
for($i=$max; $i>=0; $i--) {
$bar->set($i);
}
/** Entwas Abstand setzen */
//$cursor=$terminal->getCursor();
$terminal->getCursor()->down(2);
$terminal->writeLine('done');
$terminal->getCursor()->show();