PSR-14 events

Target group: Developers

Have a look into the event dispatcher documentation if you are not familiar with PSR-14 events.

BeforeMatomoApiRequestEvent

This event provides a possibility to adjust the site ID and the authentication token just before making the request to the Matomo API. This may be helpful in a big multi-site installation where you added a configuration independent from a site.

The event \Brotkrueml\MatomoWidgets\Event\BeforeMatomoApiRequestEvent provides the following methods:

->getIdSite()
Returns the site ID.
->setIdSite()
Sets the site ID.
->getTokenAuth()
Returns the authentication token.
->setTokenAuth()
Sets the authentication token.

Example

Dependent on the host name the current backend user is using we change the site ID:

EXT:your_extension/Classes/EventListener/BeforeMatomoApiRequestEventListener.php
<?php

declare(strict_types=1);

namespace YourVendor\YourExtension\EventListener;

use Brotkrueml\MatomoWidgets\Event\BeforeMatomoApiRequestEvent;
use Psr\Http\Message\ServerRequestInterface;
use YourVendor\YourExtension\Mapping\MatomoSiteMapper;

final class BeforeMatomoApiRequestEventListener
{
    public function __construct(
        private readonly MatomoSiteMapper $matomoSiteMapper,
    ) {}

    public function __invoke(BeforeMatomoApiRequestEvent $event): void
    {
        $hostName = $this->getRequest()->getServerParams()['REMOTE_HOST'];
        if ($idSiteFromHostName = $this->matomoSiteMapper->getIdSiteFromHostName($hostName)) {
            $event->setIdSite($idSiteFromHostName);
        }
    }

    private function getRequest(): ServerRequestInterface
    {
        return $GLOBALS['TYPO3_REQUEST'];
    }
}
Copied!

Registration of the event listener:

EXT:your_extension/Configuration/Services.yaml
services:
  # Place here the default dependency injection configuration

  YourVendor\YourExtension\EventListener\BeforeMatomoApiRequestEventListener:
    tags:
      - name: event.listener
        identifier: 'your-extension/before-matomo-api-request'
Copied!

Read how to configure dependency injection in extensions.