---
title: "Feature: #111101 - PSR-14 event BeforeFinishersAreExecutedEvent"
manual: "TYPO3 Core Changelog"
version: "main"
permalink: "https://docs.typo3.org/permalink/changelog:feature-111101-1792188000"
source: "Changelog/15.0/Feature-111101-PSR14BeforeFinishersAreExecutedEvent.rst"
typo3-version: "15.0"
typo3-major: 15
type: "feature"
issue: 111101
forge: "https://forge.typo3.org/issues/111101"
tags: ["Frontend", "PHP-API", "ext:form"]
rendered: "2026-10-27T20:58:30+00:00"
---

# Feature: #111101 - PSR-14 event BeforeFinishersAreExecutedEvent {#feature-111101-1792188000}

See [forge#111101](https://forge.typo3.org/issues/111101)

## Description {#description}

A new PSR-14 event
`\TYPO3\CMS\Form\Event\BeforeFinishersAreExecutedEvent` has been
introduced. It is dispatched by
`\TYPO3\CMS\Form\Domain\Runtime\FormRuntime` once a form has been
submitted successfully, after the last page has been validated and before the
finishers of the form are executed.

The event provides the following public properties:

-   `$finishers`: The finishers that will be executed for this
    submission, in their order of execution. Listeners may remove, reorder or
    add finishers. The form definition itself is not modified.
-   `$formRuntime`: The form runtime object (read-only).
-   `$finisherContext`: The finisher context passed to every finisher
    (read-only). Variables added to its finisher variable provider are
    available to the finishers.

## Example {#example}

For the form with the identifier `newsletterSignup`, a listener can skip
the built-in `\TYPO3\CMS\Form\Domain\Finishers\EmailFinisher` when the submitted form contains a
`sendConfirmationEmail` field set to `no`:

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

```php
use TYPO3\CMS\Core\Attribute\AsEventListener;
use TYPO3\CMS\Form\Domain\Finishers\EmailFinisher;
use TYPO3\CMS\Form\Event\BeforeFinishersAreExecutedEvent;

#[AsEventListener(identifier: 'my-extension/before-finishers-are-executed')]
final readonly class MyBeforeFinishersAreExecutedEventListener
{
    public function __invoke(BeforeFinishersAreExecutedEvent $event): void
    {
        if ($event->formRuntime->getIdentifier() !== 'newsletterSignup') {
            return;
        }

        $formValues = $event->finisherContext->getFormValues();
        if (($formValues['sendConfirmationEmail'] ?? 'yes') !== 'no') {
            return;
        }

        foreach ($event->finishers as $index => $finisher) {
            if (!$finisher instanceof EmailFinisher) {
                continue;
            }

            unset($event->finishers[$index]);
            $event->finishers = array_values($event->finishers);
            return;
        }
    }
}
```

## Impact {#impact}

With the new
`\TYPO3\CMS\Form\Event\BeforeFinishersAreExecutedEvent`, it is now
possible to react to a successfully submitted form, for example to notify an
external system, and to adjust the finishers executed for a single submission
using the standard PSR-14 event listener mechanism.
