Konsole

Einleitung

Neben Webanwendungen, lassen sich mit PHP und dem Alvine-Framework auch Anwendungen für die Konsole schreiben.

Konsolenanwendung

Eine Anwendung, die auf der Konsole ausgeführt werden soll, besitzt üblicherweise eine Klasse Main, die von der Klasse AlvineApplicationConsole abgeleitet ist.

Konsoleneingabe parsen

Alvine stellt für die Verarbeitung von Konsolenbefehlen einige hilfreiche Klassen zur Verfügung. Im folgenden Beispiel wird eine Befehl console.php mit den Argumenten match und run definiert.

$parser = new \Alvine\Application\Console\Parser();
try {
    $parser
        ->add((new \Alvine\Application\Console\Argument('console.php'))->setRequired()->setPosition(0))
        ->add((new \Alvine\Application\Console\Argument('match'))->setRequired()->setPosition(1))
        ->add((new \Alvine\Application\Console\Argument('run'))->setRequired()
            ->setDescription('run führt etwas aus')
            ->add((new \Alvine\Application\Console\Option\Boolean('r', 'review'))
                ->setDescription('review the run')->setRequired(true)
                ->onMatch(function($obj, $v) {
                      // do something
                }))
            ->onMatch(function($v) {
                // do something
            }))
        ->parse();
} catch(\Exception $e) {
    print('EXCEPTION: '.$e->getMessage());
    echo (string)(new \Alvine\Application\Console\Usage($parser,'console.php für die Befehle run und match aus.'));
} 

Ausgabe auf der Konsole

Steuersequenzen

Mit Hilfe von Steuersequenzen lassen sich in Terminalfenster Farben, Positionen und Texte anpassen. Die Klassen des AlvineApplicationConsoleTerminal Paketes bieten hierzu einige Funktionen an.

// Zeilenumbruch
echo "\n\n";
echo "Hallo ".
     \Alvine\Application\Console\Terminal\VT100\BackgroundColor::RED.  // Hintergrundfarbe rot einschalten
     ' World  '.
     Alvine\Application\Console\Terminal\VT100\EscapeSequences::RESET.'!';  // Hintergrundfarbe ausschalten
// Zeilenumbruch
echo "\n";

Beispiel im Terminalfenster

Neben den vorgefertigten Steuersequenzen können auch beliebige Steuersequenzen angelegt werden.

// Sequenz für Unterstreichung
$underline = (string)new Alvine\Application\Console\Terminal\VT100\EscapeSequences(4);
echo "\n\n";
// Das Wort World unterstreichen
echo "HALLO ".$underline." World ". Alvine\Application\Console\Terminal\VT100\EscapeSequences::RESET;
echo "\n";
echo "\n";

Beispiel im Terminalfenster

Über Positions-Objekte lassen sich Texte im Terminalfenster beliebig positionieren.

// Bildschirm leeren
echo Alvine\Application\Console\Terminal\VT100\EscapeSequences::CLEAR;

// Positionen definieren
$position1 = new \Alvine\Application\Console\Terminal\VT100\Position(20, 40);
$position2 = new \Alvine\Application\Console\Terminal\VT100\Position(21, 43);

//Ausgabe von A,B und C
echo $position1.'A'.$position2.'B'.Alvine\Application\Console\Terminal\VT100\EscapeSequences::RESET.'C';

Terminal

Eine der weit verbreitetsten Terminalsysteme ist eine auf dem VT100 beruhender Standard. Alvine bietet mit den Klassen des AlvineApplicationConsoleTerminalVT100 eine einfache Untersützung an. Die Methoden der Terminal-Klasse schrieben die Befehle direkt in den Standard-Output und werden somit umgehend mit dem Aufruf wirksam.

// Bildschirm leeren

Referenzen