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()
            ]
        );
    }
}
Copied!

Registration of the event listener:

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

  YourVendor\YourExtension\EventListener\FormRateLimitExceededLogger:
    tags:
      - name: event.listener
        identifier: 'yourFormRateLimitExceededLogger'
Copied!

Read how to configure dependency injection in extensions.