---
title: "Deprecation: #94317 - ext:form Finisher implementations"
manual: "TYPO3 Core Changelog"
version: "main"
permalink: "https://docs.typo3.org/permalink/changelog:deprecation-94317"
source: "Changelog/11.3/Deprecation-94317-ExtformFinisherImplementations.rst"
typo3-version: "11.3"
typo3-major: 11
type: "deprecation"
issue: 94317
forge: "https://forge.typo3.org/issues/94317"
tags: ["PHP-API", "NotScanned", "ext:form"]
rendered: "2026-09-23T19:53:57+00:00"
---

# Deprecation: #94317 - ext:form Finisher implementations {#deprecation-94317}

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

## Description {#description}

In preparation of the Extbase ObjectManager deprecation in favor of
symfony dependency injection, some details of EXT:form finishers had
to be adapted: In contrast to Extbase object management, symfony DI does
not support prototype classes with a mixture of manual constructor arguments,
plus dependency injection via other constructor arguments or inject methods.

The EXT:form finishers based on `\TYPO3\CMS\Form\Domain\Finishers\FinisherInterface`
relied on this and had to be adapted: The default constructor argument
`$finisherIdentifier` has been dropped, so finisher implementations can
keep using dependency injection.

## Impact {#impact}

A compatibility layer detects non-adapted finishers and falls back to
initialization using Extbase ObjectManager. This will will trigger a
PHP `E_USER_DEPRECATED` error.

## Affected Installations {#affected-installations}

In general only instances with custom form based on EXT:form are affected, and
only if they implement custom finishers.

Most custom finishers probably extend `\TYPO3\CMS\Form\Domain\Finishers\AbstractFinisher`.
Those are only affected if they override `__construct()` or use or manipulate
properties `$finisherIdentifier` or `$shortFinisherIdentifier` in
`inject*()` or `injectObject()` methods. This is rather unlikely.

Custom finishers that do not extend `\TYPO3\CMS\Form\Domain\Finishers\AbstractFinisher`
are affected.

## Migration {#migration}

Custom finishers should extend `\TYPO3\CMS\Form\Domain\Finishers\AbstractFinisher`.

If they must implement `__construct()`, they should not expect `$finisherIdentifier`
to be hand over as first argument and must not call `parent::construct()` anymore.

Custom finishers must not rely on `$finisherIdentifier` or `$shortFinisherIdentifier`
being set in early methods like `__construct()`, `inject*()` and `injectObject()`,
and must not set these properties.

Custom finishers must implement method `setFinisherIdentifier()`, this method will
be added to `\TYPO3\CMS\Form\Domain\Finishers\FinisherInterface` in TYPO3 v12.

Custom finishers must not use class property `$objectManager` since this will vanish
in v12. This will affect more API cases and will have a dedicated deprecation file
with more details, though.
