5.11 Hooks: form
In diesem Abschnitt beschäftigen wir uns mit den Hooks für die Formulare.
Hook: compileFormFields
Der compileFormFields Hook wird aufgerufen, wenn die Formularfelder eines Formulars erzeugt werden.
Registrierung
# /src/Ctocb/Example/Resources/config/services.yml
services:
# Hooks
Ctocb\Example\Classes\Contao\Hooks\ExampleHook:
public: true
tags:
- { name: contao.hook, hook: compileFormFields, method: handleHook, priority: 1024 }
Klasse
<?php
namespace Ctocb\Example\Classes\Contao\Hooks;
use Contao\Form;
class ExampleHook {
public function handleHook(array $fields, string $formId, Form $form): array
{
// Modify $fields as needed
return $fields;
}
}
Parameter:
Parameter | Typ | Beschreibung |
---|---|---|
$fields |
array |
Array mit den Feldern des Formulars (Array von \Contao\FormFieldModel ) |
$formId |
string |
String mit der Id (Name) des Formulars aus dem Feld FORM_SUBMIT , nicht die Id aus der DB |
$form |
\Contao\Form |
Formular-Objekt |
Rückgabewert:
Typ | Beschreibung |
---|---|
array |
Array mit den Feldern des Formulars (Array von \Contao\FormFieldModel ) |
Referenz im Contao Core: \Contao\Form#L130-L138
Hook: getForm
Der getForm Hook wurde bereits unter "Hooks: controller" besprochen.
Hook: loadFormField
Der loadFormField Hook wird aufgerufen, wenn ein Formularfeld geladen wird.
Registrierung
# /src/Ctocb/Example/Resources/config/services.yml
services:
# Hooks
Ctocb\Example\Classes\Contao\Hooks\ExampleHook:
public: true
tags:
- { name: contao.hook, hook: loadFormField, method: handleHook, priority: 1024 }
Klasse
<?php
namespace Ctocb\Example\Classes\Contao\Hooks;
use Contao\Form;
use Contao\Widget;
class ExampleHook {
public function handleHook(Widget $widget, string $formId, array $formData, Form $form): Widget
{
if ('myForm' === $formId) {
$widget->class.= ' myclass';
}
return $widget;
}
}
Parameter:
Parameter | Typ | Beschreibung |
---|---|---|
$widget |
\Contao\Widget |
Instanz des Widget-Objekts des Formularfelds |
$formId |
string |
String mit der Id (Name) des Formulars aus dem Feld FORM_SUBMIT , nicht die Id aus der DB |
$formData |
array |
Array mit den Einstellungen des Formulars aus tl_form |
$form |
\Contao\Form |
Formular-Objekt |
Rückgabewert:
Typ | Beschreibung |
---|---|
\Contao\Widget |
Instanz des Widget-Objekts des Formularfelds |
Referenz im Contao Core: \Contao\Form#L191-L199
Hook: prepareFormData
Der prepareFormData Hook wird aufgerufen, wenn ein Formular abgesendet, aber bevor die Daten verarbeitet wurden.
Registrierung
# /src/Ctocb/Example/Resources/config/services.yml
services:
# Hooks
Ctocb\Example\Classes\Contao\Hooks\ExampleHook:
public: true
tags:
- { name: contao.hook, hook: prepareFormData, method: handleHook, priority: 1024 }
Klasse
<?php
namespace Ctocb\Example\Classes\Contao\Hooks;
use Contao\Form;
class ExampleHook {
public function handleHook(array &$submittedData, array $labels, array $fields, Form $form): void
{
// This calculates a deadline from a given timestamp
// and stores it as deadline in $submittedData.
$submittedData['deadline'] = strtotime('+1 hour', $submittedData['tstamp']);
}
}
Parameter:
Parameter | Typ | Beschreibung |
---|---|---|
$submittedData |
array |
Array mit den in das Formular eingegebnen Daten |
$labels |
array |
Array mit den Beschriftungen der Felder |
$fields |
array |
Array mit den Feldern des Formulars (Array von \Contao\FormFieldModel ) |
$form |
\Contao\Form |
Formular-Objekt |
Rückgabewert:
Keiner, da das Array mit den Daten als Referenz übergeben wird.
Referenz im Contao Core: \Contao\Form#L309-L317
Hook: processFormData
Der processFormData Hook wird aufgerufen, wenn ein Formular abgesendet wurde.
Registrierung
# /src/Ctocb/Example/Resources/config/services.yml
services:
# Hooks
Ctocb\Example\Classes\Contao\Hooks\ExampleHook:
public: true
tags:
- { name: contao.hook, hook: processFormData, method: handleHook, priority: 1024 }
Klasse
<?php
namespace Ctocb\Example\Classes\Contao\Hooks;
use Contao\Form;
class ExampleHook {
public function handleHook(
array $submittedData,
array $formData,
?array $files,
array $labels,
Form $form
): void {
// Do something ...
}
}
Parameter:
Parameter | Typ | Beschreibung |
---|---|---|
$submittedData |
array |
Array mit den in das Formular eingegebnen Daten |
$formData |
array |
Array mit den Einstellungen des Formulars aus tl_form |
$files |
array|null |
Array mit den hochgeladenen Dateien, falls vorhanden, sonst null |
$labels |
array |
Array mit den Beschriftungen der Felder |
$form |
\Contao\Form |
Formular-Objekt |
Rückgabewert:
keiner
Referenz im Contao Core: \Contao\Form#L533-L541
Hook: prepareFormData
Der prepareFormData Hook wird aufgerufen, wenn ein Formular abgesendet, aber bevor die Daten verarbeitet wurden.
Registrierung
# /src/Ctocb/Example/Resources/config/services.yml
services:
# Hooks
Ctocb\Example\Classes\Contao\Hooks\ExampleHook:
public: true
tags:
- { name: contao.hook, hook: prepareFormData, method: handleHook, priority: 1024 }
Klasse
<?php
namespace Ctocb\Example\Classes\Contao\Hooks;
use Contao\Form;
class ExampleHook {
public function handleHook(array &$submittedData, array $labels, array $fields, Form $form): void
{
// This calculates a deadline from a given timestamp
// and stores it as deadline in $submittedData.
$submittedData['deadline'] = strtotime('+1 hour', $submittedData['tstamp']);
}
}
Parameter:
Parameter | Typ | Beschreibung |
---|---|---|
$submittedData |
array |
Array mit den in das Formular eingegebnen Daten |
$labels |
array |
Array mit den Beschriftungen der Felder |
$fields |
array |
Array mit den Feldern des Formulars (Array von \Contao\FormFieldModel ) |
$form |
\Contao\Form |
Formular-Objekt |
Rückgabewert:
Keiner, da das Array mit den Daten als Referenz übergeben wird.
Referenz im Contao Core: \Contao\Form#L309-L317
Hook: storeFormData
Der storeFormData Hook wird aufgerufen, wenn ein Formular abgesendet, aber bevor die Daten in der Datenbank gespeichert wurden.
Registrierung
# /src/Ctocb/Example/Resources/config/services.yml
services:
# Hooks
Ctocb\Example\Classes\Contao\Hooks\ExampleHook:
public: true
tags:
- { name: contao.hook, hook: storeFormData, method: handleHook, priority: 1024 }
Klasse
<?php
namespace Ctocb\Example\Classes\Contao\Hooks;
use Contao\Form;
class ExampleHook {
public function handleHook(array $data, Form $form): void
{
if (isset($data['member'])) {
unset($data['member']); // or do something useful!
}
}
}
Parameter:
Parameter | Typ | Beschreibung |
---|---|---|
$data |
array |
Array mit den in das Formular eingegebnen Daten |
$form |
\Contao\Form |
Formular-Objekt |
Rückgabewert:
Typ | Beschreibung |
---|---|
array |
Array mit den veränderten Daten |
Referenz im Contao Core: \Contao\Form#L499-L507
Hook: validateFormField
Der validateFormField Hook wird aufgerufen, wenn ein Formular abgesendet wurde, und kann zur individuellen Validierung der Daten verwendet werden.
Registrierung
# /src/Ctocb/Example/Resources/config/services.yml
services:
# Hooks
Ctocb\Example\Classes\Contao\Hooks\ExampleHook:
public: true
tags:
- { name: contao.hook, hook: validateFormField, method: handleHook, priority: 1024 }
Klasse
<?php
namespace Ctocb\Example\Classes\Contao\Hooks;
use Contao\Form;
use Contao\Widget;
class ExampleHook {
public function handleHook(Widget $widget, string $formId, array $formData, Form $form): Widget
{
if ('myform' === $formId && $widget instanceof \Contao\FormTextField && 'mywidget' === $widget->name) {
// Do your custom validation and add an error if widget does not validate
if (!$this->validateWidget($widget)) {
$widget->addError('My custom widget error');
}
}
return $widget;
}
}
Parameter:
Parameter | Typ | Beschreibung |
---|---|---|
$widget |
\Contao\Widget |
Instanz des Widget-Objekts des Formularfelds |
$formId |
string |
String mit der Id (Name) des Formulars aus dem Feld FORM_SUBMIT , nicht die Id aus der DB |
$formData |
array |
Array mit den Einstellungen des Formulars aus tl_form |
$form |
\Contao\Form |
Formular-Objekt |
Rückgabewert:
Typ | Beschreibung |
---|---|
\Contao\Widget |
Instanz des Widget-Objekts des Formularfelds |
Referenz im Contao Core: \Contao\Form#L206-L214