/

Callbacks, Lifecycle-Hooks & Logging

Greifen Sie ein in die Anzeige einer Zelle, das Rendering eines Feld-Controls und das Geschehen bei jeder Phase eines Speichervorgangs - plus ein Audit-Trail für jede Änderung.

Column-Callbacks - individuelle Zellenanzeige

->column_callback($column, $callback, $path = null) transformiert den angezeigten Wert einer LIST-Spalte. Es läuft für jede Zeile, nur in der Listenansicht, aufgerufen mit ($value, $fieldname, $primary_key, $row, $xcrud). Ein einfacher String-Rückgabewert wird zur Sicherheit automatisch escaped; um echtes Markup zurückzugeben, umschließen Sie ihn mit Xcrud::html($html, $text = null).

function status_badge($value, $fieldname, $primary_key, $row, $xcrud)
{
    $class = $value === 'active' ? 'badge-success' : 'badge-muted';

    return Xcrud::html('<span class="badge ' . $class . '">' . htmlspecialchars($value) . '</span>');
}

$xcrud->column_callback('status', 'status_badge');
ParameterTypStandardBeschreibung
$columnstring-Spalte, deren angezeigter Wert transformiert wird
$callbackcallable|string-Funktionsname (aufgelöst über die functions.php-Konvention) oder eine Closure
$path?stringnullExplizite Datei, aus der die Funktion geladen wird, statt der Standarddatei core/functions.php

Siehe Individuelles Zellen-Rendering: Badges & Avatare für weitere Xcrud::html()-Beispiele wie Badges und Avatare.

Field-Callbacks - individuelle Formular-Controls

->field_callback($field, $callback, $path = null) ersetzt das Formular-Control eines einzelnen Felds durch individuelles HTML, aufgerufen mit ($value, $field, $primary_key, $list, $xcrud) ($list ist die bearbeitete Zeile, null bei einem neuen Datensatz). Das zurückgegebene HTML ist vertrauenswürdig und muss ein eigenes name="{field}"-Control enthalten, damit der Wert beim Speichern übernommen wird.

function rating_stars($value, $field, $primary_key, $list, $xcrud)
{
    return '<input type="number" name="' . $field . '" min="1" max="5" value="' . (int) $value . '">';
}

$xcrud->field_callback('rating', 'rating_stars');

Lifecycle-Hooks

Acht Hooks laufen an festen Punkten rund um ein Speichern/Löschen, jeweils mit $callback, ?string $path = null - geladen über dieselbe functions.php-Konvention (oder einen expliziten Pfad) wie die obigen Callbacks:

HookAusgelöst
before_createBevor das leere Add-Formular aufgebaut wird
before_listBevor die Zeilendaten des Grids abgerufen werden
before_insertBevor eine neue Zeile geschrieben wird
after_insertNachdem eine neue Zeile geschrieben wurde
before_updateBevor eine bestehende Zeile geschrieben wird
after_updateNachdem eine bestehende Zeile geschrieben wurde
before_removeBevor eine Zeile gelöscht wird
after_removeNachdem eine Zeile gelöscht wurde
function orders_after_insert($data, $primary_key, $xcrud)
{
    $xcrud->toast('Order #' . $primary_key . ' created.');
}

$xcrud->after_insert('orders_after_insert');

Toast-Benachrichtigungen

->toast($message, $type = 'success') reiht eine Toast-Benachrichtigung aus einem Hook oder einer Button-Funktion heraus ein. $type ist ein freier String; der Client erkennt success/error/info/warning für das Styling, alles andere fällt auf einen einfarbigen Toast zurück.

$xcrud->toast('Payment recorded.', 'success');
ParameterTypStandardBeschreibung
$messagestring-Toast-Text
$typestring'success'success, error, info oder warning

Audit-Trail mit set_logging()

->set_logging($enabled = true) schreibt jedes Create/Update/Delete, das das Formular dieser Tabelle auslöst, in eine logs-Tabelle: Tabellenname, Aktion, angemeldeter Benutzer, Datensatz-ID, die neuen Feldwerte und - bei Update/Delete, sofern ein vorheriger Zustand zum Erfassen existiert - die eigenen Werte der Zeile unmittelbar vor der Änderung (old_record). Standardmäßig deaktiviert, da es bei jedem Speichern einen zusätzlichen Schreibvorgang (und bei Update/Delete einen zusätzlichen Lesevorgang) hinzufügt.

$xcrud->set_logging(true);
ParameterTypStandardBeschreibung
$enabledbooltrueOb für Änderungen an dieser Tabelle Audit-Log-Zeilen geschrieben werden