Contao-Camp 2024
Ergebnis 1 bis 3 von 3

Thema: Hook gemäß Dev-Doku registrieren

  1. #1
    Contao-Nutzer
    Registriert seit
    03.10.2020.
    Beiträge
    41

    Standard Hook gemäß Dev-Doku registrieren

    Hallo zusammen,

    ich habe Contao Version 4.9.13 installiert und eine Anfängerfrage.
    Ich versuche anhand der Dev-Doku zu verstehen wie ein Hook registriert wird.
    Wie empfohlen möchte ich das per Annotation durchführen.
    Ich habe in /src/EventListener/ die ParseArticlesListener.php angelegt.
    PHP-Code:
    <?php
    namespace App\EventListener;

    use 
    Contao\CoreBundle\ServiceAnnotation\Hook;
    use 
    Contao\FrontendTemplate;
    use 
    Contao\Module;
    use 
    Contao\UserModel;

    /**
     * @Hook("parseArticles")
     */
    class ParseArticlesListener
    {
        public function 
    __invoke(FrontendTemplate $template, array $newsEntryModule $module): void
        
    {
            
    // Fetch the news entry's author
            
    $author UserModel::findByPk($newsEntry['author']);

            
    // Override the "author" variable of the template with the row information of the author
            
    $template->author $author->row();
        }
    }
    Dann in der composer.json die noch fehlende auotloading Direktive eingefügt:
    Code:
    "autoload": {
            "psr-4": {
                "App\\": "src/"
            }
        }
    Eine Kopie des template news_short.html5 erzeugt und entsprechend der Doku geändert.

    Die Dokumentation zu Services habe ich so verstanden, das wegen der Verwendung des Namespace App die services.yml nicht notwendig bzw. darin kein weiterer Eintrag notwendig ist.
    Im folgenden mit dem contao-manager den Composer Class Loader aktualisiert und den Cache geleert.

    Im FE bekomme ich die gewünschte Änderung nicht angezeigt.

    Auf der Konsole habe ich vendor/bin/contao-console debug:container "App\\EventListener\\ParseArticlesListener" aufgerufen.

    Als Ergebnis erhalte ich im Logfile
    Code:
    [2021-04-15 16:34:46] console.CRITICAL: Error thrown while running command "debug:container 'App\EventListener\ParseArticlesListener'". Message: "No services found that match "App\EventListener\ParseArticlesListener"." {"exception":"[object] (Symfony\\Component\\Console\\Exception\\InvalidArgumentException(code: 0): No services found that match \"App\\EventListener\\ParseArticlesListener\". at /html/contao/vendor/symfony/framework-bundle/Command/ContainerDebugCommand.php:258)","command":"debug:container 'App\\EventListener\\ParseArticlesListener'","message":"No services found that match \"App\\EventListener\\ParseArticlesListener\"."} []
    Offensichtlich wird der Service / Hook nicht geladen.

    Anhand der Beiträge in der Community oder der Dokumentation ist es mir leider nicht gelungen meinen Fehler zu finden.

    Kann mir jemand helfen bzw. einen Hinweis geben?
    Geändert von stu (17.04.2021 um 17:02 Uhr)

  2. #2
    Contao-Nutzer
    Registriert seit
    03.10.2020.
    Beiträge
    41

    Standard

    Fehler gefunden, es war noch ein weiteres - fehelrhaftes - php für den Versuch zur Implementierung eines Callbacks vorhanden.
    Diesen entfernt und nochmals den Cache neu aufgebaut. Dann wurde der Hook auch registriert.

    Mit der Zeile aus dem Beispiel der Dokumentation
    Code:
    <p class="author"><a href="mailto:<?= $this->author->email ?>"><?= $this->author->name ?></a></p>
    habe ich aber keine Ausgabe erhalten.
    Mit der Variante
    Code:
    <?php $author = $this->author; ?>
    <p class="author"><a href="mailto:<?= $author[email] ?>"><?= $author[name] ?></a></p>
    hat es funktioniert.

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

    Standard

    Hab ich nun in der Dokumentation behoben
    » sponsor me via GitHub or PayPal or Revolut

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
  •