Contao-Summit 2026

Peter Adelmann, trilobit GmbH

Contao-Summit 2026

Formular-Power in Contao

Formular-Power in Contao
Vom Standard-Feld zum komplexen Workflow

Formulare sind das Herzstück der Interaktion auf jeder Website – vom einfachen Kontaktformular bis hin zu komplexen Konfiguratoren.

Doch wie holt man das Beste aus Contao heraus, ohne das Rad jedes Mal neu zu erfinden?

Was uns heute erwartet

Wer bin ich?
trilobit GmbH

In eigener Sache

Wer bin ich / trilobit GmbH

  • Peter Adelmann
  • Erweiterungsentwicklung und Individual-Programmierung
  • Aus dem Südwesten der Republik
  • Familienvater & Coffeeholic
  • Seit 2002 bei trilobit und damit ein Urgestein der Firma
  • Erste Schritte in Perl bevor es dann ab ~ 2010 mit TypoLight bzw Contao weiterging

Das Fundament
Contao Core & Formulargenerator

#01

Das Fundament: Contao Core

Der integrierte Formulargenerator liefert bereits ein solides Grundgerüst – ohne zusätzliche Erweiterungen.

#01.1 Feldtypen

Struktur, Interaktion & Sicherheit

Contao stellt ein flexibles Sortiment zur Verfügung:

#01.1

#01.2 Validierungen

Vertrauen ist gut, serverseitige Validierung ist sicherer!

Eine gute User Experience beginnt im Frontend – aber die echte Kontrolle liegt auf dem Server.
Möglichkeiten der serverseitigen Validierung:

#01.2

#01.2 Validierungen

Numerische Zeichen Zahlen, Minus -, Punkt ., Leerzeichen _
Alphabetische Zeichen Buchstaben, Minus -, Punkt ., Leerzeichen _
Alphanumerische Zeichen Zahlen, Buchstaben, Minus -, Punkt ., Leerzeichen _
Erweiterte alphanumerische Zeichen alle Zeichen mit Ausnahme von: # / ( ) < = >
Datum gem. globalen Datumsformat; z. B. d.m.Y *)
Uhrzeit gem. globalen Uhrzeitformat; z. B. H:i *)
Datum, Uhrzeit gem. globalen Datums- und Uhrzeitformats; z. B. l, j. M Y (H:i.s) *)
Telefonnummer Zahlen, Plus +, Minus -, Schrägstrich /, runde Klammern ( ), Leerzeichen _
E-Mail-Adresse gültige E-Mail-Adresse
URL-Format gültige URL
Absolute URL absolute URL http:// oder https://
Eigene eigener regulärer Ausdruck
* php.net/manual/en/datetime.format.php

#01.3 Bordmittel optimal nutzen

Clever konfigurieren statt aufwendig programmieren

Ein wirklich gutes Formular nimmt die Nutzer an die Hand und
schützt sich gleichzeitig selbst vor falschen Eingaben.

#01.3

#01

Lust auf mehr Details?

Für die vertiefende Recherche lohnt sich ein
Blick in das offizielle Benutzerhandbuch ;-)

Dort findet sich ein ausführliches, praxisnahes Kapitel rund um den Formulargenerator, mit allen Feldtypen und Validierungen Schritt für Schritt im Detail.

docs.contao.org/5.x/manual/de/formulargenerator/formularfelder/

Das Ökosystem
Nützliche Erweiterungen

#02

Das Ökosystem

Standard ist gut – Erweiterungen sind für spezielle Anforderungen oft die bessere Wahl.

#02.1 Mehrseitige Formulare (./terminal42/...)

contao-mp_forms

Mehr Benutzerfreundlichkeit bei komplexen Formularen — Wenn Standard-Formulare an ihre Grenzen stoßen.

Seitenumbrüche flexibel setzen
Neue Formularschritte direkt im Formulargenerator definieren.
Fortschritt & Navigation
Automatische Schritt-Navigation und Progress-Anzeige im Frontend.
Zusammenfassung
Überprüfung aller eingegebenen Daten vor dem Absenden via Simple Tokens.

https://github.com/terminal42/contao-mp_forms

#02.2 Feldabhängigkeiten (./terminal42/...)

contao-conditionalformfields
contao-conditionalselectmenu

Statische Formulare in interaktive Abfragen verwandeln.

Formulare, die mitdenken
Dynamische Logik.
Irrelevant?
Nutzer nicht mit irrelevanten Feldern überfordern.
Flexiblität
Flexibles Ein- und Ausblenden von Formularfeldern basierend auf Nutzer-Auswahlen.

https://github.com/terminal42/contao-conditionalformfields
https://github.com/terminal42/contao-conditionalselectmenu

#02.3 Neue Feldtypen (./terminal42/...)

contao-countryselect

Manuelle Ländertabellen anlegen war gestern!

Standardisierte ISO-Codes
Saubere Datenübergabe im Backend.
Automatische Mehrsprachigkeit
Die Ländernamen passen sich der Sprache des Besuchers an.
Einfache Integration
Direct als neuer Feldtyp im Formulargenerator auswählbar.

https://github.com/terminal42/contao-countryselect

#02.3 Neue Feldtypen (./terminal42/...)

contao-fineuploader

Komfortabler Datei-Upload mit Bild-Vorschau & Drag & Drop.

Drag & Drop & Multiple Uploads
Mehrere Dateien gleichzeitig und intuitiv hochladen.
Direkte Rückmeldung
Live-Fortschrittsanzeige und visuelle Bild-Vorschau (Previews).
Volle Kontrolle
Maximale Dateigrößen, erlaubte Dateitypen und Anzahl der Uploads direkt im Backend konfigurieren.

https://github.com/terminal42/contao-fineuploader

#02.3 Neue Feldtypen (./trilobit-gmbh/...)

contao-databaseformfieldoptions-bundle

Formularoptionen direkt aus der Contao-Datenbank speisen.

Flexible Quellen
Greife auf Contao-Standards (z. B. Seiten, Mitglieder, Nachrichten) oder eigene Tabellen zu.
Bedingungen & Sortierung
Filtere Daten sätze gezielt via SQL-Bedingungen, um nur relevante Optionen anzuzeigen.
Vielseitig einsetzbar
Perfekt für Dropdowns (select), Checkbox-Gruppen und Radio-Buttons.

https://github.com/trilobit-gmbh/contao-databaseformfieldoptions-bundle

#02.4 Antispam (./con2net/...)

contao-anti-spam-form-bundle

Umfangreiche SPAM-Schutz-Mechanismen: Multi-Layer SPAM-Schutz.

IP-Blacklist
Prüfung gegen StopForumSpam.com.
E-Mail-Blacklist
Erkennung von SPAM-E-Mail-Adressen.
ALTCHA Captcha
Captcha ohne Tracking.
Honeypot-Felder
Unsichtbare Fallen für Bots.
Content-Analyse
Pattern-Checks.
Zeit-basierte Validierung
Erkennung zu schneller/langsamer Submits.
JavaScript-Token
Überprüfung, ob JavaScript aktiv ist.

https://github.com/con2net/contao-anti-spam-form-bundle

#02.4 LiveValidierung (./trilobit-gmbh/...)

contao-formvalidation-bundle

Erweiterte Formular-Validierung direkt bei der Eingabe.

Nahtlose Integration
Fügt sich in die bestehende Formular-Konfiguration von Contao ein.
Direkte Rückmeldung
Live-Validierung mit Hinweisen zur Eingabe.
Nicht nur für den Formulargenerator
Registrieren, persönliche Daten, Login, Passwort Service, Kommentare.

https://github.com/trilobit-gmbh/contao-formvalidation-bundle

#02.5 ... und andere Services (./mandrael/...)

contao-form-csrf-fix

CSRF Fehler; ungültiges Anfrage-Token?!
Zuverlässige Formulare vor maximalem Cache.

Einsetzen
Wenn Formularseiten direkt aufgerufen werden und nicht scheitern dürfen. Seiten, die ein Formular enthalten, werden vom Shared Cache ausgenommen und immer frisch ausgeliefert.
Verzichtbar
Wenn die Formulare praktisch nur über die interne Navigation erreicht werden.

https://github.com/mandrael/contao-form-csrf-fix

#02.6 ... und Feedback aus der Session ;-)

Contao AdvancedForm
Oveleon
AdvancedForm sorgt für eine gezielte Benutzerführung und erleichtert Ihren Kunden die Dateneingabe Schritt für Schritt.
www.oveleon.de/advancedform.html
Extended Form Fields
INSPIRED MINDS
Praktische Zusatzfunktionen wie Zeichenzähler, Wortfilter, bedingte Feldanzeige für Mitgliedergruppen und individuelle Fehlermeldungen.
github.com/inspiredminds/contao-extended-form-fields
Unterschrift in Contao-Formularen
Softleister
Formulare in Contao digital unterschreiben.
www.softleister.de/contao-signature-formfield-bundle.html
form-scr-default
e-spin
Standardauswahlen für die Formularelemente Select, Checkbox und Radiobutton dynamisch vorgegeben.
github.com/e-spin/form-scr-default-bundle

#02

Lust auf mehr Details?

Ein Blick in die Contao Extensions lohnt sich immer!

Hier lässt sich gezielt nach passenden Formular-Modulen suchen: Ob mehrseitige Abfragen, digitale Signaturfelder, erweiterte Validierungen oder bedingte Anzeigen – die große Auswahl bietet für jeden Zweck die richtige Funktion.

extensions.contao.org/?q=formular

„Deep Dive“
Spezial-Lösungen

#03

„Deep Dive“

Wenn Standard-Lösungen an ihre Grenzen stoßen, kommen spezialisierte Erweiterungen ins Spiel.

#03.1 Dynamische Feldgruppen (./trilobit-gmbh/...)

contao-multiformgroup-bundle

Maximale Flexibilität für komplexe Datenstrukturen.

Einfache Skalierung
Ganze Abschnitte (z. B. Vorname, Nachname, E-Mail) lassen sich durch den Nutzer duplizieren.
Saubere Übermittlung
Die eingegebenen Daten werden strukturiert aufbereitet und verarbeitet.
Optimale UX
Keine überflüssigen, leeren Felder für Nutzer, die nur einen Eintrag machen – aber volle Kapazität für Mehrfacheingaben.

https://github.com/trilobit-gmbh/contao-multiformgroup-bundle

#03.1.a

#03.2 Komplexe Abhängigkeitsstränge (./trilobit-gmbh/...)

contao-jointforms-bundle

Formular-Abläufe und Abhängigkeiten definieren. Intelligente Formular-Logik auf Basis der Contao-Mitgliederverwaltung.

Zwischenspeichern & Fortsetzen
Einzelne Formulare separat absenden – alle Daten werden direkt beim Mitglied persistiert.
Smarte Abhängigkeiten
Verknüpfe Formulare untereinander und reagiere flexibel auf bereits ausgefüllte Felder.
Dynamische Inhalte
Steuere Inhaltselemente passgenau über die Symfony ExpressionLanguage unter Zugriff auf die bisherigen Nutzerdaten.

https://github.com/trilobit-gmbh/contao-jointforms-bundle

#03.2

#03.2

Daten & Benachrichtigung
Verarbeitung nach dem Absenden

#04

Und Abflug!

Was passiert nach dem Klick auf „Senden"? Die richtige Verarbeitung ist entscheidend.

#04.1 Daten speichern (./Core/Formulargenerator/...)

Formulareingaben direkt in der Datenbank sichern

Speichere Formular-Daten ganz flexibel als Tabelleneinträge in deiner Datenbank – entweder als Ergänzung oder als Alternative zum E-Mail-Versand. Über die Zieltabelle ordnest du jedes Formularfeld der passenden Datenbankspalte zu und behältst so die volle Kontrolle über deine Daten.

#04.1 Daten speichern (./terminal42/...)

contao-leads

Mit dieser Erweiterung speicherst du Contao-Formulardaten zentral als Leads – inklusive Unterstützung für mehrsprachige Formulare und Unterformulare.

Strukturierte Datenerfassung
Speichert Formulardaten als Leads (ideal auch für mehrsprachige Formulare)..
Natives Handling
Vollständig konfigurierbar direkt im Contao-Formulargenerator.
Individueller Export
Maßgeschneiderter Export der Leads.

https://github.com/terminal42/contao-leads

#04.2 Benachrichtigen (./terminal42/...)

notification_center

E-Mail, SMS oder individuelle Kanäle: Flexible Benachrichtigungen einfach gelöst.

Universelle Architektur
Trennt Nachrichtenauslösung (Code) von Inhalt und Konfiguration.
Beliebige Gateways
Unterstützt E-Mail, SMS und weitere individuelle Kanäle.
Entwicklerfreundlich
Schnelle Integration eigener Benachrichtigungstypen.

https://github.com/terminal42/notification_center

#04.2 Benachrichtigen (./trilobit-gmbh/...)

contao-zipuploads-bundle

Alle Uploads automatisch in einem ZIP zusammenfassen.

Flexible
Individuelle Dateinamen und Ablageorte: Der Dateiname kann über Simple-Tokens individualisiert werden.
Kompatibel mit dem Contao-Standard-Uploader oder terminal42/contao-fineuploader.
Volle Kontrolle
Automatisches Aufräumen der einzelnen Uploads und/oder erzeugten ZIPs.
Kompatibel mit dem terminal42/notification_center.
Ausgabe des Dateinamens oder als Download-Link.

https://github.com/trilobit-gmbh/contao-zipuploads-bundle

Für Entwickler
Eigene Anwendungen
& Hooks

#05

Für Entwickler:
Eigene Anwendungen & Hooks

Wenn es richtig individuell wird, lohnt sich der Blick in den Code.

#05.1 Eigene Validierungen

Maßgeschneiderte Datenprüfung nach deinen Regeln

Standard-Validierungen reichen oft nicht aus: Mit eigenen Validierungen stellst du sicher, dass eingegebene Daten exakt deinen Anforderungen entsprechen.

#05.1 Eigene Validierungen

#[AsHook('addCustomRegexp')]


// src/EventListener/AddCustomRegexpListener.php
namespace App\EventListener;

use Contao\CoreBundle\DependencyInjection\Attribute\AsHook;
use Contao\Widget;

#[AsHook('addCustomRegexp')]
class AddCustomRegexpListener
{
    public function __invoke(string $regexp, $input, Widget $widget): bool
    {
        if ('foobar' !== $regexp) {
            return false;
        }

        $foo = new bar($input);

        if (!$foo->Verify()) {
            $widget->addError($GLOBALS['TL_LANG']['ERR']['foobar']);
        }

        return true;
    }
}
        

#05.1 Eigene Validierungen

#[AsHook('addCustomRegexp')]


// contao/dca/tl_form_field.php
$GLOBALS['TL_DCA']['tl_form_field']['fields']['rgxp']['options'][] = 'foobar';


// contao/languages/en/tl_form_field.php
$GLOBALS['TL_LANG']['tl_form_field']['foobar'] = [
    'foobar',
    'Enter a valid foobar.'
];
        

#05.1 Eigene Validierungen

#[AsHook('validateFormField')]


// src/EventListener/ValidateFormFieldListener.php
namespace App\EventListener;

use Contao\CoreBundle\DependencyInjection\Attribute\AsHook;
use Contao\Form;
use Contao\Widget;

#[AsHook('validateFormField')]
class ValidateFormFieldListener
{
    public function __invoke(
        Widget $widget,
        string $formId,
        array $formData,
        Form $form
    ): Widget
    {
        if ('myform' !== $form->formID || 'foobar' !== $widget->name) {
            return $widget;
        }

        $foo = new bar($input);

        if (!$foo->Verify()) {
            $widget->addError($GLOBALS['TL_LANG']['ERR']['foobar']);
        }

        return $widget;
    }
}
        

#05.2 Hooks nach dem Absenden

Maximale Automation direkt nach dem Absenden

Mit Submit-Hooks klinkst du dich nahtlos in den Prozess direkt nach dem Formularversand ein. Ob Daten an externe APIs übergeben, individuelle Datenbank-Einträge, ... Alles ist möglich.


#05.2 Hooks nach dem Absenden

#[AsHook('processFormData')]


// src/EventListener/ProcessFormDataListener.php
namespace App\EventListener;

use Contao\CoreBundle\DependencyInjection\Attribute\AsHook;
use Contao\Form;

#[AsHook('processFormData', priority: 100)]
class ProcessFormDataListener
{
    public function __invoke(
        array &$submittedData,
        array $formData,
        array|null $files,
        array $labels,
        Form $form
    ): void
    {
        // do somthing
    }
}
        

#05.2 Hooks nach dem Absenden

„Do What I Want“

Benach­richtigungen
...
DMS
Dropbox, einfache Ablage im Dateisystem, ...
Payment
Unzer, PayPal, ...
CRM
...
Exporte
...
Inhalte
„neue Veranstaltung melden“, ...
...
...
...
...

#05.2 ... (trilobit-gmbh)

Dokumente as a Service

Erzeuge individuelle Dokumente genau dann, wenn sie gebraucht werden. Ob strukturierte Excel-Tabellen (XLSX), bearbeitbare Word-Dokumente (DOCX) oder druckfertige PDFs: System- und Formulardaten in maßgeschneiderte Dokumente verwandeln.

#05.2

Rechnung

Anschreiben

#05

Lust auf mehr Details?

Für die vertiefende Recherche lohnt sich ein
Blick in die offizielle Entwickler-Dokumentation ;-)

Dort findet sich ein ausführliches, praxisnahes Kapitel rund um Hooks Schritt für Schritt im Detail.

docs.contao.org/5.x/dev/reference/hooks/

Best Practices
Praxisbeispiele

#06

Best Practices & Praxisbeispiele

Theorie ist gut, Praxis ist besser. Reale Anwendungsfälle zeigen, wie die Werkzeuge ineinandergreifen.

#06

Best Practices & Praxisbeispiele

Werkzeugkasten
Fazit

Der Werkzeugkasten im Überblick

Von Core bis Custom Code – für jede Anforderung das passende Werkzeug.

#01
#02
#03
#04

Beginne immer mit dem Core und steigere dich nur bei
Bedarf – das hält Projekte wartbar und schlank.

Fazit

Contao bietet ein durchdachtes Formular-Ökosystem – vom einfachen Kontaktformular bis zum komplexen Konfigurator.

Vielen Dank