[654 Aufrufe]

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