Feature: #107568 - PSR-14 event before renderable is validated
See forge#107568
Description
A new PSR-14 event
Before
has been introduced. It serves as an improved replacement for the now
removed hook
$GLOBALS.
The new event is dispatched right before a renderable is validated.
The event provides the following public properties:
$value: The submitted value of the renderable.$form: The form runtime object (read-only).Runtime $renderable: The renderable (read-only).$request: The current request (read-only).
Example
An example event listener could look like this:
use TYPO3\CMS\Core\Attribute\AsEventListener;
use TYPO3\CMS\Core\Error\Error;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Localization\TranslationService;
use TYPO3\CMS\Form\Event\BeforeRenderableIsValidatedEvent;
final class BeforeRenderableIsValidatedEventListener
{
#[AsEventListener('my-extension/before-renderable-is-validated')]
public function __invoke(BeforeRenderableIsValidatedEvent $event): void
{
$renderable = $event->renderable;
if ($renderable->getType() !== 'AdvancedPassword') {
return;
}
$elementValue = $event->value;
if ($elementValue['password'] !== $elementValue['confirmation']) {
$processingRule = $renderable
->getRootForm()
->getProcessingRule($renderable->getIdentifier());
$processingRule->getProcessingMessages()->addError(
GeneralUtility::makeInstance(
Error::class,
GeneralUtility::makeInstance(TranslationService::class)->translate('validation.error.1556283177', null, 'EXT:form/Resources/Private/Language/locallang.xlf'),
1556283177
)
);
}
$event->value = $elementValue['password'];
}
}
Impact
With the new
Before,
it is now possible to modify or validate the value of a renderable element
before TYPO3 Core performs its built-in validation logic. This allows
extensions to inject custom validation rules or preprocessing steps before
standard validation runs.