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();