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\
provides the following methods:
->get
Form Identifier (): string - Returns the form identifier.
->get
Interval (): string - Returns the configured interval.
->get
Limit (): int - Returns the configured limit.
->get
Policy (): string - Returns the configured policy.
->get
Request (): \ Psr\ Http\ Message\ Server Request Interface - 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(),
],
);
}
}