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.