PSR-14 events

Target group: Developers

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

RateLimitExceededEvent

New in version 1.2.0.

This event is dispatched when the rate limit for a form has been exceeded. This way you can create an event listener which notifies you about the exceeded limit: add a log entry, send an email, inform a third-party system, etc.

The event \Brotkrueml\FormRateLimit\Event\RateLimitExceededEvent provides the following methods:

->getFormIdentifier(): string

Returns the form identifier.

->getInterval(): string

Returns the configured interval.

->getLimit(): int

Returns the configured limit.

->getPolicy(): string

Returns the configured policy.

->getRequest(): \Psr\Http\Message\ServerRequestInterface

New in version 1.3.0.

Returns the PSR-7 request object.

Example

This example adds an entry to the TYPO3 log:

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

declare(strict_types=1);

namespace YourVendor\YourExtension\EventListener;

use Brotkrueml\FormRateLimit\Event\RateLimitExceededEvent;
use Psr\Log\LoggerInterface;

final class FormRateLimitExceededLogger
{
    private LoggerInterface $logger;

    public function __construct(LoggerInterface $logger)
    {
        $this->logger = $logger;
    }

    public function __invoke(RateLimitExceededEvent $event): void
    {
        $this->logger->warning(
            'The form with identifier "{formIdentifier}" was sent more than {limit} times within {interval}',
            [
                'formIdentifier' => $event->getFormIdentifier(),
                'limit' => $event->getLimit(),
                'interval' => $event->getInterval()
            ]
        );
    }
}

Registration of the event listener:

EXT:your_extension/Configuration/Services.yaml
services:
  YourVendor\YourExtension\EventListener\FormRateLimitExceededLogger:
    tags:
      - name: event.listener
        identifier: 'yourFormRateLimitExceededLogger'