Contao-Camp 2024
Ergebnis 1 bis 3 von 3

Thema: Verständnisfrage Invokable Services

  1. #1
    Contao-Nutzer Avatar von chatjack
    Registriert seit
    02.09.2012.
    Ort
    Essen
    Beiträge
    160

    Standard Verständnisfrage Invokable Services

    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 $rowstring $labelDataContainer $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.

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.897
    Partner-ID
    10107

    Standard

    Sofern du in der Standard composer.json nichts angepasst hast und keine eigenen Service Definitionen betreibst, müsste das anlegen der PHP Datei reichen.
    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Contao-Nutzer Avatar von chatjack
    Registriert seit
    02.09.2012.
    Ort
    Essen
    Beiträge
    160

    Standard

    Das ist merkwürdig. Werde das noch Mal mit einer frischen Contao-Instanz testen. Danke!

    Anbei mal die aktuelle composer.json. Hatte hier eigentlich nichts angepasst.

    Code:
    {
        "type": "project",
        "require": {
            "contao/conflicts": "*@dev",
            "contao/manager-bundle": "4.13.*"
        },
        "extra": {
            "public-dir": "web",
            "contao-component-dir": "assets"
        },
        "scripts": {
            "post-install-cmd": [
                "@php vendor/bin/contao-setup"
            ],
            "post-update-cmd": [
                "@php vendor/bin/contao-setup"
            ]
        }
    }

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •