Deprecation: #94317 - ext:form Finisher implementations 

See forge#94317

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 

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 

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 

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.