[1845 Aufrufe]

5.1 Hooks: Allgemeiner Aufbau

In diesem Abschnitt beschäftigen wir uns mit den Hooks. Sie sind ähnlich den Callbacks. Die Hooks beschränken sich aber nicht auf das DCA, sie werden bei verschiedenen Vorkommnissen des Systems aufgerufen. Da es viel zu viele Hooks gibt, um sie in einem Artikel zu betrachten, werde ich für die Aufteilung auf mehrere Texte, die Tags aus dem Handbuch verwenden. Da die meisten Hooks mehrere Tags haben, werde ich sie beim ersten Vorkommen beschreiben und später auf diese Einträge verlinken.

Es gibt wieder verschiedene Wege, um die Hooks zu registieren. Ich verwende, wie bei den Callbacks, die YAML-Variante. Es ist aber auch noch möglich die Hooks in der Datei Ressources/contao/config/config.php zu definieren. Des Weiteren stehen Attribute und Annotations zur Verfügung.

Hier eine Übersicht, welche Möglichkeit ab welcher Contao-Version zur Verfügung steht:

Version Art der Registrierung
immer $GLOBALS['TL_HOOKS'] in config.php
4.5 YAML
4.8 Annotations
4.13 Attribute

Weitere Informationen zu den einzelnen Arten der Registrierung sind im Handbuch zu finden.

Registrierung:

Hier beschreibe ich einmal die grundsätzliche Registrierung eines Hooks mit Erläuterung der einzelnen Einstellungen. Beim Besprechen der einzelnen Hooks folgen dann konkrete Beispiele für die Registrierung.

Die Hooks werden ebenfalls in der Datei /src/Ctocb/Example/Resources/config/services.yml registriert. Es wäre auch möglich eine extra Datei zu verwenden (z. B. /src/Ctocb/Example/Resources/config/hooks.yml). Dann muss aber das Manager Plugin angepasst werden, damit die Datei geladen wird (s. "Manager Plugin").

# /src/Ctocb/Example/Resources/config/services.yml
services:

  # Hooks
  Ctocb\Example\Classes\Contao\Hooks\ActivateAccountHook:
      public: true
      tags:
          - { name: contao.hook, hook: activateAccount, method: onAccountActivation, priority: 100 }

In Zeile 5 steht der Name der Klasse, dieser ist gleichzeigt der Bezeichner für den Eintrag in der YAML-Datei. In Zeile 6 setzten wir der Eintrag auf public. Unter tags gibt der Eintrag name an, dass es sich um einen Hook von Contao handelt. hook gibt an, um welchen Hook es sich handelt. Der Eintrag method gibt an, welche Methode unserer Klasse aufgerufen werden soll und priority gibt an, in welcher Reihenfolge die Hooks aufgerugen werden sollen, wenn es mehrere gibt.

Klasse des Hooks

Ich speichere die Klassen für die Hooks im Ordner der Erweiterung unter Classes/Contao/Hooks, es ergibt sich also als Speicherort für den oben definierten Hook src/Ctocb/Example/Classes/Contao/Hooks/ActivateAccountHook.php. Wer nicht weiß, wie ich auf den Speicherort komme, sollte sich noch einmal den Beitrag " "Aufbau einer Contao Erweiterung"" ansehen.

<?php

namespace Ctocb\Example\Classes\Contao\Hooks;

use Contao\Module;
use Contao\MemberModel;

class ActivateAccountHook {

    public function onAccountActivation(MemberModel $member, Module $module): void
    {
        // do something ...
    }
}

In den nächsten Texten werden wir auf die einzelnen Hooks geneuer eingehen. Ich verwende hier die Beispiele aus dem Handbuch, da ich aufgrund der Menge nicht für jeden Hook ein spezielles Beispiel schreiben kann und die Beispeiel im Handbuch gut verständlich sind.

An dieser Stelle noch einmal ein riesiges Dankeschön an alle, die am Handbuch mitarbeiten.