4.2 Globale Callbacks
Die globalen Callbacks werden bei Operationen aufgerufen, die sich auf die ganze Tabelle beziehen. Sie werden immer dann verwendet, wenn man die Tabelle als Ganzes betrachtet.
In diesen Beispielen werden die Callbacks immer in der Datei
/src/Ctocb/Example/Resources/config/services.yml
registriert und die Klasse für die Verarbeitung ist hier immer
/src/Ctocb/Example/Classes/Contao/Callbacks/TlTest.php
. Wer nicht weiß was hier gemeint ist, sollte sich den Text
" "Grundlagen der Callbacks"" noch einmal ansehen.
(Bitte auch in diesem Artikel wieder den Vendor-Namespace (und/oder entsprechenden Ordner)
durch Euren eignen ersetzen und nicht Ctocb
verwenden! Danke!)
Callback: config.onload
Der onload_callback
wird beim Laden der Daten einer Tabelle ausgeführt. Dies betrifft sowohl die Listenansicht, als
auch die Bearbeitungsmaske im Backend. Zusätzlich wird er im Frontend in den Modulen "Personal data", "Registration",
"Password" und "Change Password" aufgerufen. Man kann mit ihm z. B. das DCA zur Laufzeit manipulieren oder
Berechtigungen prüfen.
services:
Ctocb\Example\Classes\Contao\Callbacks\TlTest:
public: true
tags:
- { name: contao.callback, target: config.onload, table: tl_test, method: myCallback, priority: 1024 }
Die Klasse für die Bearbeitung des Callbacks kann ungefähr so aussehen. Die Methode gibt keinen Wert zurück.
<?php declare(strict_types=1);
namespace Ctocb\Example\Classes\Contao\Callbacks;
class TlTest
{
public function myCallback($dc = null): void
{
// do something ...
}
}
Es ist zu beachten, dass der onload_callback
auch im Frontend aufgerufen wird, dort aber kein Data Container
Objekt übergibt. Außerdem übergeben mache Erweiterungen andere Objekte, wie z. B. der MultiColumnWizard. Ich habe
deshalb hier keinen TypHint verwendet und ein = null
hinzugefügt. Dieses Vorgehen kann im Zweifelsfall bei allen
Callbacks angewendet werden. Es sollte aber sehr genau geprüft werden, ob es wirklich nötig ist. Es ist immer besser
einen TypeHint zu verwenden!
Callback: config.oncreate
Der oncreate_callback
wird aufgerufen, wenn ein neuer Datensatz angelegt wird.
services:
Ctocb\Example\Classes\Contao\Callbacks\TlTest:
public: true
tags:
- { name: contao.callback, target: config.oncreate, table: tl_test, method: myCallback, priority: 1024 }
Die Methode für die Verarbeitung des Callbacks gibt keinen Wert zurück.
<?php declare(strict_types=1);
namespace Ctocb\Example\Classes\Contao\Callbacks;
use Contao\DataContainer;
class TlTest
{
public function myCallback(string $table, int $id, array $fields, DataContainer $dc): void
{
// do something ...
}
}
Der Parameter $table
enthält den Namen der Tabelle, $id
die Id des neu angelegten Datensatzes, $fields
enthält die
Daten des neuen Datensatzes. Hier ist zu beachten, dass der Datensatz beim Aufruf der Bearbeitungsmaske angelegt wird
und somit nur $fields['tstamp'] = 0
in den Daten enthalten ist. Der Callback wird beim Speichern nicht erneut
aufgerufen, hierzu ist der config.onsubmit
-Callback zu verwenden. Der letzte Parameter enthält wieder das Data Container
Objekt.
Callback: config.onbeforesubmit
Der onbeforesubmit
-Callback wird aufgerufen, wenn ein Formular im Backend abgesendet, aber bevor die Daten in der
Datenbank gespeichert wurden.
Dieser Callback steht ab Contao 5.0 zur Verfügung.
services:
Ctocb\Example\Classes\Contao\Callbacks\TlTest:
public: true
tags:
- { name: contao.callback, target: config.onbeforesubmit, table: tl_test, method: myCallback, priority: 1024 }
Die Methode für die Verarbeitung des Callbacks muss ein Array zurückgeben.
<?php declare(strict_types=1);
namespace Ctocb\Example\Classes\Contao\Callbacks;
use Contao\DataContainer;
class TlTest
{
public function myCallback(array $values, DataContainer $dc): void
{
// do something ...
return $values
}
}
Der Parameter $value
enthält die Werte des Formulars und $dc
das Data Cantainer Objekt. Die Methode muss das Array
mit den Werten zurückgeben.
Callback: config.onsubmit
Der onsubmit
-Callback wird nach dem Speichern eines Datensatzes in der Datenbank aufgerufen.
services:
Ctocb\Example\Classes\Contao\Callbacks\TlTest:
public: true
tags:
- { name: contao.callback, target: config.onsubmit, table: tl_test, method: myCallback, priority: 1024 }
Die Methode für die Verarbeitung des Callbacks gibt keinen Wert zurück.
<?php declare(strict_types=1);
namespace Ctocb\Example\Classes\Contao\Callbacks;
use Contao\DataContainer;
class TlTest
{
public function myCallback(DataContainer $dc): void
{
// do something ...
}
}
Auch hier ist zu beachten, dass der Callback ebenfalls im Frontend im Modul "Personal data" aufgerufen wird. Dort sind
die Parameter allerdings vom Typ \Contao\FrontendUser
und \Contao\ModulePersonalData
. Dies ist sehr unschön und muss
im Quelltext entsprechend abgefangen werden.
Die Daten können im Backend über das Data Container Objekt bezogen werden: $dc->activeRecord
.
Wenn Sie verändert werden, müssen sie manuell gespeichert werden.
Callback: config.ondelete
Der ondelete
-Callback wird beim Löschen eines Datensätzes aufgerufen.
services:
Ctocb\Example\Classes\Contao\Callbacks\TlTest:
public: true
tags:
- { name: contao.callback, target: config.ondelete, table: tl_test, method: myCallback, priority: 1024 }
Die Methode für die Verarbeitung des Callbacks gibt keinen Wert zurück.
<?php declare(strict_types=1);
namespace Ctocb\Example\Classes\Contao\Callbacks;
use Contao\DataContainer;
class TlTest
{
public function myCallback(DataContainer $dc, int $undoId): void
{
// do something ...
}
}
Es ist zu beachten, dass andere Parameter übermittelt werden, wenn der Daten Container vom Typ DC_Folder
ist. Dann
wird als erster Parameter ein String mit dem Pfad der Datei und als Zweites das Data Container Objekt übergeben.
Callback: config.oncut
Der oncut
-Callback wird ausgeführt, nach dem ein Datensatz an eine neue Position verschoben wurde.
services:
Ctocb\Example\Classes\Contao\Callbacks\TlTest:
public: true
tags:
- { name: contao.callback, target: config.oncut, table: tl_test, method: myCallback, priority: 1024 }
Die Methode für die Verarbeitung des Callbacks gibt keinen Wert zurück.
<?php declare(strict_types=1);
namespace Ctocb\Example\Classes\Contao\Callbacks;
use Contao\DataContainer;
class TlTest
{
public function myCallback(DataContainer $dc): void
{
// do something ...
}
}
Der Parameter $dc
enthält das Data Container Objekt.
Callback: config.oncopy
Der oncopy
-Callback wird aufgerufen, nach dem ein Datensatz kopiert wurde.
services:
Ctocb\Example\Classes\Contao\Callbacks\TlTest:
public: true
tags:
- { name: contao.callback, target: config.oncopy, table: tl_test, method: myCallback, priority: 1024 }
Die Methode für die Verarbeitung des Callbacks gibt keinen Wert zurück.
<?php declare(strict_types=1);
namespace Ctocb\Example\Classes\Contao\Callbacks;
use Contao\DataContainer;
class TlTest
{
public function myCallback(int $insertId, DataContainer $dc): void
{
// do something ...
}
}
Der Parameter $insertId
enthält die Id des neuen Datensatzes und $dc
das Data Container Objekt.
Callback: config.oncreate_version
Der oncreate_version
-Callback wird ausgeführt, nach dem eine alte Version eines Datensatzes in die Tabelle tl_version
eingefügt wurde.
services:
Ctocb\Example\Classes\Contao\Callbacks\TlTest:
public: true
tags:
- { name: contao.callback, target: cconfig.oncreate_version, table: tl_test, method: myCallback, priority: 1024 }
Die Methode für die Verarbeitung des Callbacks gibt keinen Wert zurück.
<?php declare(strict_types=1);
namespace Ctocb\Example\Classes\Contao\Callbacks;
class TlTest
{
public function myCallback(sttring $table, int $parentId, int $version, array $record): void
{
// do something ...
}
}
$table
enthält den Namen der Tabelle, aus der der Datensatz stammt. $parentId
enthält die Id des original
Datensatzes. Im Parameter $version
steht die Nummer der Version. Der Parameter wird bei jeder neuen Version um eins
erhöht. Die Daten stehen im Parameter $record
.
Callback: config.onrestore_version
Der onrestore_version
-Callback wird aufgerufen, wenn eine alte Version wiederhergestellt wird.
services:
Ctocb\Example\Classes\Contao\Callbacks\TlTest:
public: true
tags:
- { name: contao.callback, target: config.onrestore_version, table: tl_test, method: myCallback, priority: 1024 }
Die Methode für die Verarbeitung des Callbacks gibt keinen Wert zurück.
<?php declare(strict_types=1);
namespace Ctocb\Example\Classes\Contao\Callbacks;
class TlTest
{
public function myCallback(string $table, int $parentId, int $version, array $record): void
{
// do nothing, use onundo_callback instead!
}
}
$table
enthält den Namen der Tabelle, aus der der Datensatz stammt. $parentId
enthält die Id des original
Datensatzes. Im Parameter $version
steht die Nummer der Version. Die Daten stehen im Parameter $record
.
Callback: config.onundo
Der onundo
-Callback wird aufgerufen, wenn ein gelöschter Datensatz wiederhergestellt wird.
services:
Ctocb\Example\Classes\Contao\Callbacks\TlTest:
public: true
tags:
- { name: contao.callback, target: config.onundo, table: tl_test, method: myCallback, priority: 1024 }
Die Methode für die Verarbeitung des Callbacks gibt keinen Wert zurück.
<?php declare(strict_types=1);
namespace Ctocb\Example\Classes\Contao\Callbacks;
use Contao\DataContainer;
class TlTest
{
public function myCallback(string $table, array $record, DataContainer $dc): void
{
// do something ...
}
}
Der Parameter $table
enthält den Namen der Tabelle, aus der der Datensatz stammt. In $record
sind die Daten
enthalten und $dc
ist das Data Container Objekt.
Callback: config.oninvalidate_cache_tags
Mit dem oninvalidate_cache_tags
-Callback kann man Cache Tags invalidieren.
Dieser Callback steht ab Contao 4.7 zur Verfügung.
services:
Ctocb\Example\Classes\Contao\Callbacks\TlTest:
public: true
tags:
- { name: contao.callback, target: config.oninvalidate_cache_tags, table: tl_test, method: myCallback, priority: 1024 }
Die Methode für die Verarbeitung des Callbacks muss ein Array zurückgeben.
<?php declare(strict_types=1);
namespace Ctocb\Example\Classes\Contao\Callbacks;
use Contao\DataContainer;
class TlTest
{
public function myCallback(DataContainer $dc, array $tags): array
{
// do something ...
return $tags;
}
}
Im Parameter $dc
ist wieder das Data Container Objekt und in $tags
sind die Tags, die invalidiert werden sollen.
Das Array kann um eigene Tags ergänzt werden, oder man kann welche entfernen. Der Callback muss das Array mit den Tags
zurückgeben.
Callback: config.onshow
Man kann mit dem onshow
-Callback das Modalfenster bearbeiten, dass beim Klick auf das in
den Listen im Backend erscheint.
Dieser Callback steht ab Contao 4.7 zur Verfügung.
services:
Ctocb\Example\Classes\Contao\Callbacks\TlTest:
public: true
tags:
- { name: contao.callback, target: config.onshow, table: tl_test, method: myCallback, priority: 1024 }
Die Methode für die Verarbeitung des Callbacks muss ein Array zurückgeben.
<?php declare(strict_types=1);
namespace Ctocb\Example\Classes\Contao\Callbacks;
use Contao\DataContainer;
class TlTest
{
public function myCallback(array $modalData, array $record, DataContainer $dc): array
{
// do something ...
return $modalData;
}
}
Der Parameter $modalData
enthält das Array mit den Daten für das Modalfenster. $record
enthält die Daten aus der
Tabelle, die zu dem Datensatz gehören. $dc
ist wie immer das Data Container Objekt.