Moin zusammen,
ich versuche aktuell Callback konsequent über Invokable Services zu verwenden. Nun hatte ich aktuell das Problem, dass die Klasse nur im Debug-Modus geladen wurde, obwohl ich den Prod-Cache neu generiert hatte, den Classloader angestoßen und den Installer für die Composer-Abhängigkeiten angestoßen hatte.
Bisher hatte ich nur die Datei angelegt, so wie es in der Dokumentation (https://docs.contao.org/dev/reference/dca/callbacks/) beschrieben ist.
Damit die Datei im Produktiv-Modus geladen wird, muss ich noch folgenden Eintrag in der "config/services.yaml" vornehmen.PHP-Code:<?php
// src/EventListener/DataContainer/ClientLabelCallback.php
namespace App\EventListener\DataContainer;
use Contao\CoreBundle\ServiceAnnotation\Callback;
use Contao\DataContainer;
use App\Model\GsHomeModel;
/**
* @Callback(table="tl_gs_client", target="list.label.label")
*/
class ClientLabelCallback
{
public function __invoke(array $row, string $label, DataContainer $dc, array $labels): array
{
// Get column index
$fields = $GLOBALS['TL_DCA']['tl_gs_client']['list']['label']['fields'];
$index = array_search('address', $fields);
if ($index !== false)
{
if ($row['home'])
{
$home = GsHomeModel::findByPk($row['home']);
$labels[$index] = sprintf('%s %s, %s %s (%s)', $home->street, $home->housenumber, $home->zipcode, $home->city, $home->name);
}
else
{
$labels[$index] = sprintf('%s %s, %s %s', $row['street'], $row['housenumber'], $row['zipcode'], $row['city']);
}
}
return $labels;
}
}
Wenn ich danach noch Mal den Installer für die Composer-Abhängigkeiten anstoße, wird die Klasse auch geladen.Code:services: App\EventListener\DataContainer\ClientLabelCallback: tags: - { name: contao.callback, table: tl_gs_client, target: list.label.label }
Was sich mir noch nicht erschlossen hat ist, ob das Anlegen des Eintrags in der "services.yaml" zwingend erforderlich ist, oder ob es eigentlich auch lediglich mit der Datei "src/EventListener/DataContainer/ClientLabelCallback.php" funktionieren müsste.

Zitieren