Diese Anleitung erklärt, wie man schnell und einfach auf die Events von anderen Extensions zugreift (Getestet auf TYPO3 v12)

1. Abhängigkeit in ext_emconf.php und composer.json

Damit wir auch später vom TYPO3 direkt die Abhängigkeit zu den gewünschten Extensions haben und sicherstellen können, dass die Extensions installiert sind, wenn unsere Extension läuft, müssen wir folg. Anpassungen in unserer emconf.php machen:

 

$EM_CONF['meineExtension'] = [
    'title' => 'Meine Extension',
    'description' => 'Extension um Powermail zu erweitern',
    'category' => 'plugin',
    'author' => 'Lukas Dörr',
    'author_email' => 'info@ldoerr.com',
    'state' => 'alpha',
    'createDirs' => '',
    'clearCacheOnLoad' => 0,
    'version' => '12.0.0',
    'constraints' => [
        'depends' => [
            'typo3' => '12.4.0-12.4.99',
/-->
            'powermail' => ''
/-->
        ],
        'conflicts' => [],
        'suggests' => [],
    ],
];

 

Außerdem fügen wir noch eine Abhängigkeit in der composer.json unserer Extension ein:

 

{
  "name": "LdoerrDotCom/meineExtension",
  "type": "typo3-cms-extension",
  "extra": {
    "typo3/cms": {
      "extension-key": "meineExtension"
    }
  },

... Hier als Beispiel mit Powermail von In2Code

"version": "12.0.1",
  "require": {
    "in2code/powermail": "dev-staging"
  },
  "autoload": {
...

 

 

2. Eventlistener erstellen

Nun legen wir unter "EXT/Classes/Listener/" eine Listener Klasse an - in meinem Beispiel nenne ich diese "CatchMailTextListener.php"

 

<?php

namespace LdoerrDotCom\MeineExtension\Listener;

use In2code\Powermail\Domain\Service\Mail\Events;
use In2code\Powermail\Events\SendMailServicePrepareAndSendEvent;

class GenerateCsvListener {


    public function __invoke(SendMailServicePrepareAndSendEvent $event): void {


        \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($event, '$event ' . __METHOD__);

        die('hier sollte ich sterben, wenn das Event ausgeführt wird.');

        //$event enthält jetzt das Event Objekt der gewünschten Klasse.

    }
}

 

Natürlich ist es hier wichtig, dass man weiß, wie das Event heißt und wo man es findet. Im Beispiel Powermail gibt es die verschiedenen Events, die man alle abfangen kann hier: EXT:powermail/Classes/Events/ - für dieses Beispiel hole ich das Event von "SendMailServicePrepareAndSendEvent.php"

3. Services.yaml anpassen

Unseren Eventlistener registrieren wir nach dem PSR-14 Standard in unserer Services.yaml. Hier ein Beispiel:

 

services:
  _defaults:
    autowire: true
    autoconfigure: true
    public: false

  LdoerrDotCom\MeineExtension\Listener\GenerateCsvListener:
    tags:
      - name: event.listener
        event: In2code\Powermail\Events\SendMailServicePrepareAndSendEvent
        method: '__invoke'

 

 

Natürlich jetzt nicht vergessen den Autoload zu dumpen und den Cache zu löschen, dann sollte (Wie in diesem Beispiel der Code gezeigt) beim Absenden einer Form der Listener das Event abfangen und man kann jetzt mit dem $event Objekt arbeiten. Hier gibt es noch die Dokumentation dazu: https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/Events/EventDispatcher/Index.html

Previous PostTYPO3 Extbase: PersistenceManager für TYPO3 V12 nutzen
Next PostTYPO3 Tutorial: Default Ratios für Image Manipulation einstellen