PSR-14 event 

Target group: Developers

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

RateLimitExceededEvent 

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
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);

/*
 * This file is part of the "form_rate_limit" extension for TYPO3 CMS.
 *
 * For the full copyright and license information, please read the
 * LICENSE.txt file that was distributed with this source code.
 */

namespace YourVendor\YourExtension\EventListener;

use Brotkrueml\FormRateLimit\Event\RateLimitExceededEvent;
use Psr\Log\LoggerInterface;
use TYPO3\CMS\Core\Attribute\AsEventListener;

#[AsEventListener(
    identifier: 'your-extension/form-rate-limit-exceeded-logger',
)]
final readonly class FormRateLimitExceededLogger
{
    public function __construct(
        private LoggerInterface $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!