Contao 4.13 – MakerBundle nutzen um einen Hook anzulegen

Seit Contao 4.13 gibt es das MakerBundle, das es bspw. ermöglicht einfach ein Boilerplate für einen Hook anzulegen. Im Folgenden möchte ich das mal beispielhaft erläutern.

Zunächst installiert man das MakerBundle über SSH mit dem Befehl:

php -d memory_limit=-1 composer require contao/maker-bundle

Nach der Installation kann man sich die Möglichkeiten des MakerBundles ausgeben lassen mit:

php vendor/bin/contao-console make:contao:

In diesem Fall soll ein Hook angelegt werden, also:

php vendor/bin/contao-console make:contao:hook

Als Beispiel soll ein Hook angelegt werden, dessen Code ausgeführt wird, wenn ein Formular verarbeitet wird. Dazu kann man den Hook ‘processFormData’ nutzen. Die Klasse bezeichnen wir mal als ‘AddFormHook’ und wählen geben den Hook anschließend ein. Es wird dann automtaisch eine neue Datei ‘src/EventListener/AddFormHook.php’ erzeugt. Wir ergänzen den Code, wie folgt:

<?php

declare(strict_types=1);

namespace App\EventListener;

use Contao\CoreBundle\ServiceAnnotation\Hook;
use Contao\Form;

/**
 * @Hook("processFormData")
 */
class AddFormHook
{
    public function __invoke(array $submittedData, array $formData, ?array $files, array $labels, Form $form): void
    {
        // Do something

        $input = json_encode($formData);
     
        $fp = fopen('form_test_log.txt', 'w');
        fwrite($fp, $input);
        fclose($fp);

    }
}

Wenn ein Formular verarbeitet wird, wird im Arbeitsverzeichnis (das hier dann das /web Verzeichnis), eine Textdatei ‘form_test_log.txt’ erzeugt, welche die Formfelder als JSON in die Datei schreiben. Fertig! Das ist wirklich inzwischen sehr einfach, geht aber so erst ab Contao 4.13.

Die Textdatei sieht dann bspw. so aus:

{"id":"65","tstamp":"1652457477","title":"Test","alias":"test","jumpTo":"2618","sendViaEmail":"1","recipient":"info@medianetic.de","subject":"Test","format":"raw","skipEmpty":"","storeValues":"","targetTable":"","customTpl":"","method":"POST","novalidate":"","attributes":"a:2:{i:0;s:0:\"\";i:1;s:0:\"\";}","formID":"","allowTags":"","mailerTransport":"","origID":"108863","isInclude":true,"cssID":[],"typePrefix":"ce_","headline":"","hl":"h2","Template":{}}

Die Dokumentation über Contao Hooks finden man hier.