Für Entwickler: Form Builder und neue Entwickler-Werkzeuge

  • Das fünfte und letzte Vorstellungsthema zu WoltLab Suite 5.2 präsentiert zwei große Updates für Entwickler: Form Builder und mehrere Verbesserungen und neue Funktionen in den Entwickler-Werkzeugen.

    Form Builder

    Vor WoltLab Suite Core 5.2 musste bei der Erstellung von Formularen ähnlicher Code immer wieder geschrieben werden: die Eigenschaften des PHP-Controllers deklarieren, in die die Eingabewerte eingelesen werden, die entsprechenden Werte aus den Request-Daten auslesen, diese Werte validieren, sie einer `IDatabaseObjectAction`-Instanz übergeben, um das relevante Objekt zu erstellen oder zu bearbeiten, und die Eingabewerte abschließend Template-Variablen zuweisen. Im Template benötigte jedes Eingabefeld ein eigenes Form-Element, das im Allgemeinen bis auf das Label und die Beschreibung sehr viel Code mit ähnlichen Feldern gemeinsam hat.


    Mit der neuen Version von WoltLab Suite Core haben wir eine neue Komponente hinzugefügt, die die Erstellung von Formularen deutlich vereinfacht: Form Builder. Mit Form Builder muss im Wesentlichen nur ein PHP-Objekt pro Eingabefeld erstellt werden und lediglich eine Zeile Template-Code für das gesamte Formular geschrieben werden.


    Der folgende PHP-Code erstellt ein Formular mit zwei Eingabefeldern, einem einfachen Text-Feld, das ausgefüllt werden muss und dessen Wert nicht foo sein darf, und eine Ja/Nein-Auswahl (was einem boolschen Wert entspricht). Diese beiden Felder befinden sich in einem Abschnitt des Formulars, der mit wcf.global.form.data überschrieben ist.

    Formular-Controller, die Form Builder verwenden, müssen von der Klasse AbstractFormBuilderForm erben und sie müssen sowohl die Werte von $objectActionClass und $formAction setzen, als auch createForm() wie oben gezeigt überschreiben. Die save()-Methode wird automatisch aufgerufen und führt die relevante Aktion, create oder update, mit einem $objectActionClass-Objekt aus.


    Im Template ist es ausreichend die getHtml()-Methode des Formulars aufzurufen:

    Smarty
    1. {@$form->getHtml()}

    Das Ergebnis ist das folgende Formular:



    WoltLab Suite 5.2 wird bereits viele fertige Eingabefeld-Klasse mitliefern, die für die meisten Formulare ausreichend sein werden. Für spezielle Felder können Sie natürlich eigene Felder implementieren, die Sie dann auch direkt in Ihrem Paket wiederverwenden können.


    Abschließend möchten wir noch kurz vorstellen, wie Sie innerhalb Ihres Formulars Abhängigkeiten zwischen Feldern definieren. In komplexeren Formularen kann es vorkommen, dass bestimmte Teile des Formulars nur dann verfügbar sein sollen, wenn ein bestimmtes Feld einen bestimmten Wert hat. Mit Form Builder lässt sich eine solche Abhängigkeit mit nur wenigen Zeilen PHP-Code realisieren:

    PHP
    1. $foo->addDependency(
    2. ValueFormFieldDependency::create('bar')
    3. ->field($bar)
    4. ->values(['baz'])
    5. );

    In diesem Fall ist das $foo-Feld nur dann verfügbar, also im Formular sichtbar, wenn der aktuelle Wert des $bar-Feldes baz ist.


    Form Builder kann selbstverständlich nicht nur in Controllern verwendet werden. Beispielsweise ist es auch in Dialogen möglich Formulare mit Form Builder zu erstellen. In diesen Fällen muss jedoch das IFormDocument-Objekt manuell erstellt werden (AbstractFormBuilderForm erledigt dies automatisch):

    Im obigen Code-Beispiel wird das von FooAction::getFooForm() generierte Formular nach einem Klick auf den openFooFormButton-Button in einem Dialog angezeigt. Die eingegebenen Daten werden nach dem Absenden des Formulars von FooAction::submitFooForm() verarbeitet. Bei einer fehlerhaften Validierung der Daten wird das Formular mit der entsprechenden Fehlermeldung wieder angezeigt wird. Bei einer erfolgreichen Validierung werden die Rückgabewerte der FooAction::submitFooForm() an successCallback übergeben.


    Die Interfaces und Klassen von Form Builder sind umfangreich dokumentiert und wir werden unsere Entwickler-Dokumentation mit allgemeinen Informationen zu Form Builder und zur Migration alter Formulare zu neuen Form-Builder-Formularen aktualisieren.

    Neue Entwickler-Werkzeuge

    In der neuen Version haben wir außerdem viele neue Funktionen zu den Entwickler-Werkzeugen, die in der Administrationsoberfläche verfügbar sind, hinzugefügt.


    So ist es nun möglich, Pakete direkt von der Projektliste aus zu installieren, ohne vorher ein Archiv erstellen und dann das Paket manuell in der Paketverwaltung hochladen zu müssen. Stattdessen verwenden die Entwickler-Werkzeuge direkt die Originaldateien aus dem Projekt-Verzeichnis.


    Wenn ein neues Projekt angelegt wird, kann zusätzlich zum Import eines vorhandenen Pakets auch ein neues Paket erstellt werden. Dafür werden zusätzliche Formularfelder angezeigt, die alle Informationen aus der package.xml-Datei des Pakets abfragen. Beruhend auf diesen Daten wird dann auch eine package.xml-Datei für das neue Projekt erstellt. Analog zu dieser neuen Funktion beim Erstellen von neuen Projekten ist es nun auch möglich die `package.xml`-Datei vorhandener Projekte mit einer grafischen Benutzeroberfläche zu bearbeiten, die die Eingaben vor der Speicherung überprüft und so sicherstellt, dass die package.xml-Datei gültig ist.



    Eine weitere neue und ziemlich umfrangreiche neue Funktion in den Entwickler-Werkzeuge ist die Möglichkeit Package Installation Plugin-Einträge mit einer grafischen Benutzeroberfläche hinzuzufügen, zu bearbeiten und zu löschen.


    Die folgende animierte Grafik zeigt das Formular zum Hinzufügen eines neues Objekttypen zu einem Paket und demonstriert die Stärken der grafischen Benutzeroberfläche, da sich das Formular an die ausgewählten Objekttyp-Definition anpasst und alle zusätzlichen Felder anzeigt, die für die ausgewählte Objekttyp-Definition relevant sind.



    Wenn ein Eintrag gelöscht wird, wird er aus der Datenbank entfernt und die Import-Anweisung wird gelöscht. Falls das Package Installation Plugin die Löschung von Einträgen unterstützt, ist es auch möglich, eine explizite Lösch-Anweisung ergänzen zu lassen.



    Bitte beachten Sie, dass nur Package Installation Plugins, die das IGuiPackageInstallationPlugin-Interface implementieren, von der grafischen Benutzeroberfläche unterstützt werden.


    Sowohl das Formular zum Hinzufügen neuer Projekte, als auch die Formulare zum Hinzufügen und Bearbeiten von Package Installation Plugin-Einträgen wurden mit Form Builder erstellt.




    Damit ist unsere Vorstellungsreihe zu WoltLab Suite 5.2 zu Ende und wir hoffen, dass die vorgestellten Änderungen Ihr Interesse geweckt haben. Vor der Veröffentlichung der finialen Version werden wir noch eine Übersicht mit vielen der weiteren Änderungen in Version 5.2 bereitstellen.

  • Habe es zwar selber noch nicht getestet, aber der FormBuilder ist wohl die beste Neuerung in 5.2 - Nicht-Entwickler-Änderungen mit eingeschlossen ;)

  • Absolut kein Grund für ein Update sehe hier kein Sinn für den produktiven Einsatz .


    Sowas ist nix für eine Bewerbung einer neuen Version eher etwas nebensächlichen da es nicht die Standart Kundschaft anspricht.

    Aber die Kunden sind ganz groß am Schreien nach Plugins! Daher gehören neue Funktionen für Entwickler auch hier rein.

  • Habe es zwar selber noch nicht getestet, aber der FormBuilder ist wohl die beste Neuerung in 5.2 - Nicht-Entwickler-Änderungen mit eingeschlossen ;)

    Und die Dev Tools sind brauchbarer - für bestehende Projekte bleibt aber noch die Fehlkonzeption mit dem tar-PIPs und den App-Bezeichnern, wäre okay, hätte man das von Anfang an so eingeführt als Short-Version, aber hat man nicht.

    Der Formbuilder ist ganz nett. Ich kam dann irgendwann auf das Problem, dass ich values von anderen Feldern brauche - aber gut noch gab es ja keine Doku dazu, habe ich dann mit etwas denken auch gelöst.

  • Habe es zwar selber noch nicht getestet, aber der FormBuilder ist wohl die beste Neuerung in 5.2 - Nicht-Entwickler-Änderungen mit eingeschlossen ;)

    Der FormBuilder ist echt gut :D erinnert mich gerade ziemlich an SwiftUI und auch das habe ich mega gefeiert :) freue mich schon drauf.

    Ich werde es die Tage sicherlich mal testen und hoffe, dass ich damit genauso zufrieden bin wie mit SwiftUI :)

  • Absolut kein Grund für ein Update sehe hier kein Sinn für den produktiven Einsatz .


    Sowas ist nix für eine Bewerbung einer neuen Version eher etwas nebensächlichen da es nicht die Standart Kundschaft anspricht.


    Das sehe ich komplett anders. Das Vorstellungs-Thema ist für die "Standard-Kundschaft" vielleicht wirklich zu technisch geschrieben (ich weiß nicht, wie technisch bewandert der durchschnittliche Käufer der Software ist), aber es ist definitiv mehr als eine "Nebensächlichkeit" und natürlich etwas, was man für die neue Version durchaus bewerben kann. Ich verstehe ehrlich gesagt nicht, wieso du meinst, man sollte eine solche Neuerung nicht bewerben. Nur weil du damit nichts anfangen kannst? Andere können mit anderen Neuerungen nichts anfangen. Und dieses Vorstellungsthema richtet sich ja sogar ausdrücklich per Themen-Titel an Entwickler. :/

    "Wir finden Worte, die wie Geschosse treffen, wir leisten Schwüre, die niemals zerbrechen. Wir steh'n zusammen auch wenn man uns nicht mag, wir leben schneller, schneller in den Tag. Unsere Metaphern sind teuflische Ikonen, harte Aphorismen, gewagte Abstraktionen. Ein Strauß von Versen im Idiomenbeet, verbale Blüten wie es geschrieben steht."


    (Saltatio Mortis)

  • Für WoltLab: Habt ihr irgendwelche Vergleichswerte, wie stark dieses Klassenkonstrukt die Performance im Vergleich zu der alten Methode belastet?

    return null;


    Browser: Firefox Nightly (64bit)

    Betriebssystem: Windows 10

  • Das sehe ich komplett anders. Das Vorstellungs-Thema ist für die "Standard-Kundschaft" vielleicht wirklich zu technisch geschrieben (ich weiß nicht, wie technisch bewandert der durchschnittliche Käufer der Software ist), aber es ist definitiv mehr als eine "Nebensächlichkeit" und natürlich etwas, was man für die neue Version durchaus bewerben kann. Ich verstehe ehrlich gesagt nicht, wieso du meinst, man sollte eine solche Neuerung nicht bewerben. Nur weil du damit nichts anfangen kannst? Andere können mit anderen Neuerungen nichts anfangen. Und dieses Vorstellungsthema richtet sich ja sogar ausdrücklich per Themen-Titel an Entwickler. :/

    Richtig sie richtig sich ausschließlich an Entwickler darum geht es mir doch in meinen Augen ist das eine neben Sache die man im Entwickler Bereich erwähnen kann da es für die Laufkundschaft eh irrelevant ist . Da wäre andere Sachen interessanter gewesen.



    Und klar brauchen die Entwickler auch solche Sachen aber das einem Otto normaler Verbraucher als Future zu verkaufen was er bezahlen soll naja vorallem da es ja auch welche gibt die weder Plugins haben noch wollen.


    Es ist ausschließlich für kommerzielle und nicht kommerziellen Entwickler interessant.


    Noch cooler wäre sowas als Plugin an zu bieten wie bei der Elastik search Anbindung etc .

  • Da wäre andere Sachen interessanter gewesen.

    Das wird doch kein "entweder oder" sein. Ich bezweifle, dass jetzt bestimmte Funktionen nicht vorgestellt werden, nur weil das hier vorgestellt wurde. Also verstehe ich ehrlich gesagt dein Problem nicht. Kalender, Galerie & Co interessieren mich auch null, aber da hab ich mich auch nicht beschwert als da was vorgestellt wurde. Ignorieren und fertig. Das hier ist für alle Leute interessant, die programmieren können. Das müssen auch nicht zwingend Entwickler aus dem Plugin Store sein. Auch wenn man nur seine eigene Installation erweitern will, kann das schon interessant sein.

  • Das wird doch kein "entweder oder" sein. Ich bezweifle, dass jetzt bestimmte Funktionen nicht vorgestellt werden, nur weil das hier vorgestellt wurde. Also verstehe ich ehrlich gesagt dein Problem nicht. Kalender, Galerie & Co interessieren mich auch null, aber da hab ich mich auch nicht beschwert als da was vorgestellt wurde. Ignorieren und fertig. Das hier ist für alle Leute interessant, die programmieren können. Das müssen auch nicht zwingend Entwickler aus dem Plugin Store sein. Auch wenn man nur seine eigene Installation erweitern will, kann das schon interessant sein.

    Da gibt es nichts hinzuzufügen, danke. :thumbup:

    Wie interessant das ist, kann man ja auch an den Likes erkennen, die dieses Thema bereits in kurzer Zeit hat, im Vergleich zu den anderen Vorstellungsthemen. :)

  • Ich bezweifle, dass jetzt bestimmte Funktionen nicht vorgestellt werden, nur weil das hier vorgestellt wurde.

    Öhm, nöö... Da kommt jetzt nichts mehr wenn ich den ersten Satz lese.

    Das fünfte und letzte Vorstellungsthema zu WoltLab Suite 5.2 präsentiert zwei große Updates für Entwickler: Form Builder und mehrere Verbesserungen und neue Funktionen in den Entwickler-Werkzeugen.

    Was soll denn da noch kommen ReeN ?


    Das hier ist für alle Leute interessant, die programmieren können.

    Ich kann zwar nicht programmieren, finde es aber trotzdem interessant. ^^

  • Es wurde aber sicher keine Funktion vom CMS oder Forum, die noch vorgestellt werden sollte, jetzt nicht mehr vorgestellt, weil man stattdessen das hier vorgestellt hat. Hätte es diese Vorstellung nicht gegeben, wären es halt nur vier Vorstellungsthemen gewesen, anstatt fünf. WoltLab wird sich schon im Vorfeld überlegt haben, was genau die vorstellen wollen und in wie viele Themen man das aufteilt.

  • Na, da lassen wir uns mal überraschen.. Ich denke das mit "letzte Vorstellungsthema zu WoltLab Suite 5.2" es das auch war. Klar - ich würde mich freuen wenn es anders würde, ;)


  • Was wäre denn interessanter gewesen, wenn es nichts mehr vorzustellen gibt? Und da das ein Feature vom Core ist, muss der Kunde das auch nicht extra zahlen.


    Zum letzten Satz äußere ich mich Mal nicht...

  • Kann man seine bestehenden Formulare denn weiternutzen oder wurden interne Änderungen vorgenommen, die eine Migration zwingend machen?

    Ja, diese bleiben selbstverständlich vollständig erhalten. Aus Kompatibilitätsgründen verzichten wir bei bestehenden Formularen auf eine Umstellung, damit alle Plugins (Event- und Template-Listener) bei unseren Formularen weiterhin funktionieren. Lediglich bei neu geschaffenen Formularen, die es in den Vorgängerversionen noch nicht gab, setzen wir konsequent auf Form Builder.


    Der Einsatz von Form Builder wird von uns ausdrücklich empfohlen, es nimmt sehr viel redundante Arbeit ab und gewährleistet "nebenbei" noch ein konsistentes GUI und eine gute Benutzbarkeit entsprechend der Richtlinien für barrierefreie Websites (WCAG 2.0 ARIA).