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.
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;
}
}
Damit die Datei im Produktiv-Modus geladen wird, muss ich noch folgenden Eintrag in der "config/services.yaml" vornehmen.
Code:
services:
App\EventListener\DataContainer\ClientLabelCallback:
tags:
- { name: contao.callback, table: tl_gs_client, target: list.label.label }
Wenn ich danach noch Mal den Installer für die Composer-Abhängigkeiten anstoße, wird die Klasse auch geladen.
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.
Lesezeichen