Signatur
Beschreibung
UI\Controls\MultilineEntry ist ein Steuerelement der PHP-UI-Erweiterung (php-ui bzw. libui), das ein mehrzeiliges Texteingabefeld darstellt. Es eignet sich überall dort, wo Benutzer längere Texte eingeben sollen, etwa Notizen, Kommentare oder Nachrichtentexte in Desktop-GUI-Anwendungen.
Die Klasse unterstützt zwei Modi: Im Standard-Modus (Wrapping) wird langer Text automatisch umgebrochen, sodass kein horizontaler Scrollbalken erscheint. Im Non-Wrapping-Modus bleibt jede Zeile in einer einzigen langen Zeile, und ein horizontaler Scrollbalken wird bei Bedarf eingeblendet. Der gewünschte Modus wird über den Konstruktor-Parameter festgelegt.
Über die Methoden getText() und setText() kann der aktuelle Inhalt ausgelesen bzw. gesetzt werden. Mit append() lässt sich Text an den bestehenden Inhalt anhängen. Das Steuerelement kann über setReadOnly() auf schreibgeschützt gesetzt werden. Änderungen am Text können mit einem Handler überwacht werden, der via onChange() registriert wird.
Diese Klasse ist Teil der experimentellen UI-Extension für PHP und wird typischerweise in nativen Desktop-Anwendungen eingesetzt, die mit PHP und libui erstellt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $wrapping | bool | true | Gibt an, ob langer Text automatisch umgebrochen wird (true = mit Umbruch, false = ohne Umbruch, horizontaler Scrollbalken). |
Beispiele
Einfaches mehrzeiliges Eingabefeld mit Zeilenumbruch
<?php
use UI\App;
use UI\Window;
use UI\Controls\MultilineEntry;
use UI\Controls\Button;
use UI\Controls\Box;
$app = new App();
$window = new Window('Notizen', 400, 300, false);
$window->setMargined(true);
$box = new Box(Box::Vertical);
$box->setPadded(true);
// Mehrzeiliges Eingabefeld mit automatischem Zeilenumbruch
$entry = new MultilineEntry(true);
$entry->setText("Erster Absatz\nZweiter Absatz");
$box->append($entry, true);
$button = new Button('Text ausgeben');
$button->onClick(function() use ($entry) {
echo $entry->getText() . PHP_EOL;
});
$box->append($button, false);
$window->add($box);
$window->show();
$app->run();
Schreibgeschütztes Feld ohne Zeilenumbruch und onChange-Handler
<?php
use UI\App;
use UI\Window;
use UI\Controls\MultilineEntry;
use UI\Controls\Box;
$app = new App();
$window = new Window('Log-Viewer', 600, 400, false);
$window->setMargined(true);
$box = new Box(Box::Vertical);
$box->setPadded(true);
// Kein Zeilenumbruch – geeignet für Log-Ausgaben
$log = new MultilineEntry(false);
$log->setReadOnly(true);
$log->append("[INFO] Anwendung gestartet\n");
$log->append("[DEBUG] Verbindung hergestellt\n");
$log->append("[ERROR] Timeout beim Abrufen der Daten\n");
$box->append($log, true);
// Eingabefeld mit Änderungs-Handler
$input = new MultilineEntry(true);
$input->onChange(function(MultilineEntry $entry) {
// Wird bei jeder Textänderung aufgerufen
$length = strlen($entry->getText());
echo "Aktuelle Zeichenanzahl: {$length}\n";
});
$box->append($input, true);
$window->add($box);
$window->show();
$app->run();
// Wichtig · Fallstricke
Experimentell: Die UI-Extension für PHP ist als experimentell eingestuft. API-Änderungen zwischen Versionen sind möglich. Der Einsatz in Produktivsystemen sollte sorgfältig abgewogen werden.
Die Extension setzt eine installierte libui-Bibliothek voraus und funktioniert nur in CLI-Skripten, die eine native Event-Loop starten. Ein Einsatz im Web-Kontext (z. B. via Apache/FPM) ist nicht möglich.
MultilineEntry ist nicht für sehr große Textmengen (z. B. Megabytes) optimiert. Für reine Log-Anzeigen mit häufigen Aktualisierungen sollte die Anzahl der append()-Aufrufe minimiert werden.