Skip to content

Pre- und PostActionHooks

Die Action Hooks sind Yii2-Komponenten, die es ermöglichen, Code vor oder nach jeder Controller-Action auszuführen. Sie nutzen das Event-System von Yii2, um sich in den Request-Lifecycle einzuklinken.

Konzept

In Yii2 löst jede Controller-Action zwei Events aus:

  • EVENT_BEFORE_ACTION - Vor der Action-Ausführung
  • EVENT_AFTER_ACTION - Nach der Action-Ausführung

Die Action Hooks registrieren Listener auf diese Events und führen zentrale Logik aus, ohne dass bestehende Controller modifiziert werden müssen.

Registrierung

Beide Komponenten sind in src/config/coreComponents.php als Core-Komponenten registriert:

php
'preActionHooks' => [
    'class' => \app\components\PreActionHooks::class
],
'postActionHooks' => [
    'class' => PostActionHooks::class
]

Dadurch werden sie bei jedem Request automatisch initialisiert.

PreActionHooks

Die PreActionHooks-Komponente wird vor jeder Controller-Action ausgeführt. Sie dient primär zur:

  • Configuration-Injection: Laden von dynamischen Einstellungen aus der Datenbank in Yii::$app->params
  • Behavior-Injection: Dynamisches Anhängen von Behaviors (z.B. AccessControl) an externe Module

Anwendungsfälle

AnwendungsfallBeschreibung
Mail-KonfigurationLädt Absender- und Antwort-Mailadressen aus den Einstellungen
HealthCheck-CacheKonfiguriert die Cache-Dauer für Health-Checks
Modul-ZugriffskontrolleFügt AccessControl-Behaviors zu externen Modulen hinzu

Vorteile

  • Externe Module (BackgroundJobs, AuditLog) können mit Zugriffsbeschränkungen versehen werden, ohne deren Code zu ändern
  • Einstellungen aus der Datenbank werden einmalig pro Request geladen und sind danach überall verfügbar

PostActionHooks

Die PostActionHooks-Komponente wird nach jeder Controller-Action ausgeführt. Sie dient zur:

  • Nachträglichen Datenerfassung: Protokollierung oder Audit-Logging basierend auf dem Ergebnis einer Action

Anwendungsfälle

AnwendungsfallBeschreibung
TracingAuditErstellt Audit-Einträge für TC-Linienproduktion nach erfolgreichen Tracing-Requests

Bedingte Registrierung

PostActionHooks können ihre Event-Listener bedingt registrieren:

php
public function init()
{
    parent::init();
    if (Licenses::findOne(['module' => 'tclineproduction'])->license) {
        Yii::$app->on(Module::EVENT_AFTER_ACTION, [$this, 'addTracingAudit']);
    }
}

Dies ermöglicht lizenzbasierte Aktivierung von Funktionalität.

Vergleich

AspektPreActionHooksPostActionHooks
ZeitpunktVor der ActionNach der Action
EventEVENT_BEFORE_ACTIONEVENT_AFTER_ACTION
Typische NutzungKonfiguration, ZugriffskontrolleLogging, Audit, Nachverarbeitung
Request-DatenVollständig verfügbarVollständig verfügbar inkl. Response

Erweiterung

Um neue Hooks hinzuzufügen:

  1. Neue Methode in der entsprechenden Hook-Klasse erstellen
  2. Event-Binding in init() hinzufügen
  3. Optional: Lizenz- oder Bedingungsprüfung implementieren
php
public function init()
{
    parent::init();
    Yii::$app->on(Module::EVENT_BEFORE_ACTION, [$this, 'myNewHook']);
}

public function myNewHook(): void
{
    // Hook-Logik
}

Vorteile des Hook-Ansatzes

  • Entkopplung: Zentrale Logik ohne Änderungen an einzelnen Controllern
  • Wartbarkeit: Alle Hooks an einem Ort
  • Flexibilität: Bedingte Aktivierung basierend auf Lizenzen oder Konfiguration
  • Testbarkeit: Hooks können isoliert getestet werden

ITeas iScan Applikation Dokumentation

Version: dev-master Version: dev-master
Commit: 7d189e4d
Deployed at: 2026-02-12T11:05:32Z