Contao Hook processFormData: Formular-Benachrichtigungen an Slack & Mattermost senden
Erfahre, wie du mit dem Contao Hook processFormData automatisch Nachrichten an Slack oder Mattermost sendest – inklusive Webhook- und Codebeispielen.
Lesedauer: ca. 6–10 Minuten
Schnelleinstieg
Navigation überspringen- Contao Hook processFormData
- Das Beispiel des processFormData Hooks aus der Contao Dokumentation
- 1. Grundlagen: Was macht der Hook?
- 2. Hook registrieren
- 4. Szenario B: Nachricht an Mattermost senden
- 5. Szenario C: Nur bestimmte Formulare melden
- 6. Szenario D: Schöne Formatierung (Markdown)
- 7. Best Practice: Symfony HttpClient statt cURL
- 8. Komplettbeispiel Listener (Slack)
- Fazit
Contao Hook processFormData Automatische Channel-Alerts
Formulare gehören zu den zentralen Elementen fast jeder Contao-Website – ob Kontaktanfragen, Event-Anmeldungen oder Support-Tickets. Doch oft reicht es nicht aus, dass die Daten nur per E-Mail verschickt oder in der Datenbank gespeichert werden.
Gerade in modernen Teams entsteht Kommunikation dort, wo alle ohnehin arbeiten: in Slack oder Mattermost.
In diesem Beitrag zeige ich dir Schritt für Schritt, wie du den Contao Hook processFormData nutzen kannst, um nach einer erfolgreichen Formularübermittlung automatisch eine Nachricht an einen Channel zu senden – sauber integriert in Symfony, flexibel konfigurierbar und mit sofort einsetzbaren Codebeispielen.
Egal ob du Support-Anfragen schneller verteilen, Sales-Leads direkt pushen oder interne Prozesse automatisieren möchtest: Mit Webhooks und wenigen Zeilen PHP lässt sich Contao problemlos an deine Team-Kommunikation anbinden.
Beispiele, wann Contao automatisch eine Nachricht an einen Slack oder Mattermost Channel schicken soll, z. B.:
- Support-Channel
- Sales-Channel
- Gäste-Registrierung
- Systemmonitoring
Das Beispiel des processFormData Hooks aus der Contao Dokumentation
// src/EventListener/ProcessFormDataListener.php
namespace App\EventListener;
use Contao\CoreBundle\DependencyInjection\Attribute\AsHook;
use Contao\Form;
#[AsHook('processFormData')]
class ProcessFormDataListener
{
public function __invoke(array $submittedData, array $formData, array|null $files, array $labels, Form $form): void
{
// Do something …
}
}
1. Grundlagen: Was macht der Hook?
Der Hook wird ausgeführt nachdem ein Formular erfolgreich verarbeitet wurde, aber bevor Contao die Seite weiterleitet. Typische Einsatzfälle:
- Slack Benachrichtigung bei Kontaktformular
- Mattermost Nachricht bei Event-Anmeldung
- Logging in externe Systeme
2. Hook registrieren
<?php
// src/EventListener/FormProcessListener.php
namespace App\EventListener;
use Contao\CoreBundle\DependencyInjection\Attribute\AsHook;
class FormProcessListener
{
#[AsHook('processFormData')]
public function onProcessFormData(array $submittedData, array $formData, array $files, array $labels): void
{
// Beispiel: Name aus Formular
$name = $submittedData['name'] ?? 'Unbekannt';
// Nachricht erzeugen
$message = "📩 Neues Formular abgesendet von: *$name*";
// TODO: Nachricht an Slack/Mattermost senden
}
}
3. Szenario A: Nachricht an Slack senden
Slack unterstützt sogenannte Incoming Webhooks.
Schritt 1: Slack Webhook erstellen
- Slack öffnen
- Workspace → Apps → Incoming
- Webhooks aktivieren Webhook URL kopieren, z. B.:
https://hooks.slack.com/services/XXX/YYY/ZZZ
Schritt 2: Nachricht senden via HTTP POST
private function sendSlackMessage(string $webhookUrl, string $text): void
{
$payload = json_encode([
'text' => $text
]);
$ch = curl_init($webhookUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json'
]);
curl_exec($ch);
curl_close($ch);
}
Nutzung im Hook:
public function onProcessFormData(array $submittedData, array $formData, array $files, array $labels): void
{
$name = $submittedData['name'] ?? 'Unbekannt';
$message = "📩 Neues Kontaktformular von *$name*";
$this->sendSlackMessage(
$_ENV['SLACK_WEBHOOK'],
$message
);
}
.env Datei
SLACK_WEBHOOK="https://hooks.slack.com/services/XXX/YYY/ZZZ"
4. Szenario B: Nachricht an Mattermost senden
Mattermost unterstützt ebenfalls Incoming Webhooks.
Schritt 1: Webhook in Mattermost erstellen
- Mattermost → Channel öffnen
- Menü → Integrations → Incoming Webhooks
- Neue URL generieren:
https://mattermost.example.com/hooks/abc123xyz
Schritt 2: Mattermost Nachricht senden
Mattermost Payload:
{
"text": "Hallo Channel!"
}
PHP Code:
private function sendMattermostMessage(string $webhookUrl, string $text): void
{
$payload = json_encode([
'text' => $text
]);
file_get_contents($webhookUrl, false, stream_context_create([
'http' => [
'method' => 'POST',
'header' => "Content-Type: application/json\r\n",
'content' => $payload
]
]));
}
Nutzung:
$message = "🎟️ Neue Event-Anmeldung: {$submittedData['email']}";
$this->sendMattermostMessage(
$_ENV['MATTERMOST_WEBHOOK'],
$message
);
.env Datei
MATTERMOST_WEBHOOK="https://mattermost.example.com/hooks/abc123xyz"
5. Szenario C: Nur bestimmte Formulare melden
Oft soll nicht jedes Formular Benachrichtigungen auslösen.
Beispiel: Nur Formular mit ID 3 oder Name contact_form
if ($formData['id'] !== 3) {
return;
}
oder
if ($formData['formID'] !== 'contact_form') {
return;
}
6. Szenario D: Schöne Formatierung (Markdown)
Slack & Mattermost unterstützen Markdown:
$message = <<<TEXT
📩 *Neues Formular erhalten*
👤 Name: {$submittedData['name']}
📧 Email: {$submittedData['email']}
📝 Nachricht: {$submittedData['message']}
TEXT;
7. Best Practice: Symfony HttpClient statt cURL
Empfohlen für moderne Contao-Versionen:
use Symfony\Contracts\HttpClient\HttpClientInterface;
public function __construct(private HttpClientInterface $client) {}
private function send(string $url, string $text): void
{
$this->client->request('POST', $url, [
'json' => ['text' => $text]
]);
}
8. Komplettbeispiel Listener (Slack)
Empfohlen für moderne Contao-Versionen:
<?php
namespace App\EventListener;
use Contao\CoreBundle\DependencyInjection\Attribute\AsHook;
use Symfony\Contracts\HttpClient\HttpClientInterface;
class FormProcessListener
{
public function __construct(private HttpClientInterface $client) {}
#[AsHook('processFormData')]
public function onProcessFormData(array $submittedData, array $formData): void
{
if ($formData['formID'] !== 'contact_form') {
return;
}
$text = "📩 Neue Nachricht von {$submittedData['name']}";
$this->client->request('POST', $_ENV['SLACK_WEBHOOK'], [
'json' => ['text' => $text]
]);
}
}
Fazit
Mit dem Hook processFormData kannst du sehr elegant:
- Slack Alerts
- Mattermost Notifications
- System Events
direkt nach Formularabsendung auslösen. In einer Ausbaustufe könntest du auch Anhänge aus Formularen mitsenden.
Frag uns gern an, wenn du Hilfe benötigst.
Du willst mehr über Contao wissen?
Ähnliche Beiträge
*******************
Liebe Leser,
Menschen sind nicht ausschließlich Frauen, Männer, weiblich, männlich, divers – Menschen können vielfältiger sein! Wir möchten euch ALLE als Menschen ansprechen, egal von welchem Geschlecht oder welcher Kultur. Sprachlich ist es schwierig, euch alle „richtig“ anzusprechen. Daher verwenden wir – auch für eine bessere Lesbarkeit – bei Personenbezeichnungen meist die männliche Form, wie Dienstleister oder Partner. Aber eins ist uns wichtig: Keiner soll sich ausgeschlossen fühlen.
Zudem sind wir Verfechter des DU #gernperdu und gestalten so unsere tägliche Kommunikation etwas lockerer und persönlicher. Auch hier gilt: Wir bringen allen die gleiche Wertschätzung entgegen.
*******************