---
title: "PSR-14 Events"
manual: "Form"
version: "main"
permalink: "https://docs.typo3.org/permalink/typo3/cms-form:apireference-events-legacy-hooks@main"
source: "D/Events/Index.rst"
rendered: "2026-10-03T08:19:46+00:00"
---

# PSR-14 Events {#apireference-events-legacy-hooks}

EXT:form dispatches PSR-14 events at key points in the lifecycle of a form –
both in the backend form editor and during frontend rendering. These events
are the recommended extension point for developers; the legacy
`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']` hooks have been removed.

> [!NOTE]
> **See also**
>
> The canonical, always-up-to-date reference for all EXT:form events lives
> in the TYPO3 Core API documentation:
>
> [Form](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/Events/Events/Form/Index.html#eventlist-form)
>
> The extension documentation below provides context, usage notes and
> quick navigation; it intentionally avoids duplicating the full API
> reference.

-   [Backend events (form editor / manager)](https://docs.typo3.org/permalink/typo3/cms-form:backend-events-form-editor-manager@main)
-   [Frontend events (form rendering / runtime)](https://docs.typo3.org/permalink/typo3/cms-form:frontend-events-form-rendering-runtime@main)
-   [Registering an event listener](https://docs.typo3.org/permalink/typo3/cms-form:registering-an-event-listener@main)

## Backend events (form editor / manager) {#apireference-events-backend}

These events are dispatched when an editor creates, saves, duplicates or
deletes a form definition in the TYPO3 backend.

| Event | When / what can be modified |
| --- | --- |
| [BeforeFormIsCreatedEvent](https://docs.typo3.org/permalink/t3coreapi:beforeformiscreatedevent) | Modify the form definition array and/or the persistence identifier before a new form is created in the backend. |
| [BeforeFormIsSavedEvent](https://docs.typo3.org/permalink/t3coreapi:beforeformissavedevent) | Modify the form definition array and/or the persistence identifier before a form is saved in the backend. |
| [BeforeFormIsDuplicatedEvent](https://docs.typo3.org/permalink/t3coreapi:beforeformisduplicatedevent) | Modify the form definition array and/or the persistence identifier of the copy before a form is duplicated. |
| [BeforeFormIsDeletedEvent](https://docs.typo3.org/permalink/t3coreapi:beforeformisdeletedevent) | Dispatched before a form is deleted. Set `$event->preventDeletion = true` to abort the deletion (the event implements `StoppableEventInterface`). |

## Frontend events (form rendering / runtime) {#apireference-events-frontend}

These events are dispatched during form rendering in the frontend.

| Event | When / what can be modified |
| --- | --- |
| [AfterFormIsBuiltEvent](https://docs.typo3.org/permalink/t3coreapi:afterformisbuiltevent) | Modify the `FormDefinition` object after the form factory has finished building the complete form. |
| [BeforeRenderableIsAddedToFormEvent](https://docs.typo3.org/permalink/t3coreapi:beforerenderableisaddedtoformevent) | Modify or replace a renderable (page, section or element) before it is added to the form tree. |
| [BeforeRenderableIsRemovedFromFormEvent](https://docs.typo3.org/permalink/t3coreapi:beforerenderableisremovedfromformevent) | Dispatched before a renderable is removed from the form tree. Set `$event->preventRemoval = true` to abort the removal (the event implements `StoppableEventInterface`). |
| [AfterCurrentPageIsResolvedEvent](https://docs.typo3.org/permalink/t3coreapi:aftercurrentpageisresolvedevent) | Override `$event->currentPage` after the current page has been resolved from the request, e.g. to implement conditional page-skip logic. |
| [BeforeRenderableIsValidatedEvent](https://docs.typo3.org/permalink/t3coreapi:beforerenderableisvalidatedevent) | Modify `$event->value` before property-mapping and validation run for each submitted form element. |
| [BeforeRenderableIsRenderedEvent](https://docs.typo3.org/permalink/t3coreapi:beforerenderableisrenderedevent) | Modify the renderable or the `FormRuntime` just before a renderable is output to the browser. |
| [BeforeFormValueIsRenderedEvent](https://docs.typo3.org/permalink/t3coreapi:beforeformvalueisrenderedevent) | Modify `$event->data` (e.g. `processedValue`) just before the value of a single form element is handed over to Fluid, e.g. on a summary page or in a mail template. |
| [BeforeEmailFinisherInitializedEvent](https://docs.typo3.org/permalink/t3coreapi:beforeemailfinisherinitializedevent) | Modify the options used by the `EmailFinisher` (e.g. recipients, subject) before they are applied. |
| [AfterFormStateInitializedEvent](https://docs.typo3.org/permalink/t3coreapi:eventlist-form) | Enrich components with runtime data after the `FormState` has been restored from the request (form state and form session are both available at this point). |
| [AfterFormDefinitionLoadedEvent](https://docs.typo3.org/permalink/t3coreapi:afterformdefinitionloadedevent) | Dispatched by `FormPersistenceManager` after a YAML form definition has been loaded from disk. Modify the definition globally before it reaches the form factory. |
| [AfterFormDefinitionValidationConfigurationIsBuiltEvent](https://docs.typo3.org/permalink/t3coreapi:eventlist-form) | Dispatched after the form definition validation configuration has been built from the form editor setup. Add additional writable property paths for custom inspector editor implementations. |

## Registering an event listener {#apireference-events-register}

Register a listener via the `#[AsEventListener]` PHP attribute:

**EXT:my_extension/Classes/EventListener/MyFormEventListener.php**

```php
<?php

declare(strict_types=1);

namespace MyVendor\MyExtension\EventListener;

use TYPO3\CMS\Core\Attribute\AsEventListener;
use TYPO3\CMS\Form\Event\BeforeFormIsSavedEvent;

#[AsEventListener(
    identifier: 'my-extension/before-form-is-saved',
)]
final readonly class MyFormEventListener
{
    public function __invoke(BeforeFormIsSavedEvent $event): void
    {
        // Enrich the form definition before it is persisted
        $event->form['renderingOptions']['myCustomOption'] = 'value';
    }
}

```

> [!NOTE]
> **See also**
>
> [Event dispatcher (PSR-14 events)](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/Events/EventDispatcher/Index.html#eventdispatcher) – TYPO3 Core API documentation on how to
> register and implement PSR-14 event listeners.
