Deprecation: #100622 - Extbase feature toggles

See forge#100622

Description

Extbase has an own system for feature toggles next to the Core feature toggle API. It has always been marked as internal, but is used for a couple of toggles within the Extbase framework.

All toggles and the internal PHP API have been marked as deprecated in TYPO3 v12 and should be avoided.

Impact

The PHP API for Extbase toggles has always been marked as internal. It will be removed with TYPO3 v13.

The single toggles can still be used in TYPO3 v12, but their triggered functionality will be removed with TYPO3 v13, if set to 1.

Affected installations

Extensions should not rely on \TYPO3\CMS\Extbase\ConfigurationConfigurationManagerInterface->isFeatureEnabled(). The method is marked as internal and should never have been used by extensions. The extension scanner still finds usages of this method in extensions as weak match.

All feature toggles have been marked as deprecated. Setting one of them to 1 in TypoScript will trigger a deprecation level log message, they will stop working with TYPO3 v13.

Migration

Extbase has three feature toggles in TYPO3 v12. All of them will be removed with TYPO3 v13. Instances with extensions setting those to 1 in TypoScript may need adaptions. Instances setting the toggles to 0 can simply remove them from TypoScript.

skipDefaultArguments = 1

This is an ancient toggle that was used before routing has been added with TYPO3 v9. It allowed to skip the controller and action argument in frontend plugin links, when linking to the default Extbase controller / action combination. This toggle has been documented as being broken in combination with Extbase plugin enhancer already. Consuming instances should switch to proper routing configuration instead.

ignoreAllEnableFieldsInBe = 1

This is another ancient toggle that triggers \TYPO3\CMS\Extbase\Persistence\Generic\Typo3QuerySettings->setIgnoreEnableFields(true) for Extbase repositories when used in backend scope. It allows ignoring default TCA flags like suppressing of deleted records in queries.

Extbase-based backend modules that rely on this toggle being set to 1 can easily migrate this: When the repository in question is only used in backend context, the code below should trigger the same behavior. Note as with other query settings, this toggle needs to be used with care, otherwise backend users may see records they are not supposed to see.

When the repository is used in both backend and frontend context, the code should be refactored a bit towards a public method that can be set by the Extbase backend controller only.

enableNamespacedArgumentsForBackend = 1

This toggle has been introduced in TYPO3 v12. See Feature: #97096 - Non-namespaced arguments in Extbase backend modules for more details. Extbase backend modules should no longer expect the namespace to be set. It may be necessary to adapt some Ajax calls and request-related argument checks in custom modules.