Deprecation: #109438 - ext_tables.php in extensions 

See forge#109438

Description 

Extensions that still ship an ext_tables.php file will now trigger a PHP E_USER_DEPRECATED error each time the file is loaded during a non-cached request or cache warm-up.

The ext_tables.php file was historically used to register backend modules, page doktypes, user settings, and other runtime configuration. All of these use cases now have dedicated alternatives in modern TYPO3:

  • Backend modules: Configuration/Backend/Modules.php
  • Backend routes: Configuration/Backend/Routes.php
  • User settings: Configuration/TCA/Overrides/be_users.php (see forge#108843)
  • Page doktype allowed record types: Configuration/TCA/Overrides/pages.php (see forge#108557)

Impact 

A PHP E_USER_DEPRECATED error is triggered for every third-party extension that still provides an ext_tables.php file whenever ext_tables.php files are loaded without caching, for example during cache warm-up or in development context.

Support for ext_tables.php will be removed in TYPO3 v15.0.

Affected installations 

All installations using third-party extensions that still ship an ext_tables.php file are affected.

Migration 

Move all registrations from ext_tables.php to the appropriate configuration files.

User settings 

User settings previously registered via ExtensionManagementUtility::addFieldsToUserSettings() in ext_tables.php should now be added via ExtensionManagementUtility::addUserSetting() in Configuration/TCA/Overrides/be_users.php.

Before:

ext_tables.php
$GLOBALS['TYPO3_USER_SETTINGS']['columns']['myCustomSetting'] = [
    'type' => 'check',
    'label' => 'LLL:EXT:my_ext/Resources/Private/Language/locallang.xlf:myCustomSetting',
];
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addFieldsToUserSettings(
    'myCustomSetting',
    'after:emailMeAtLogin'
);
Copied!

After:

Configuration/TCA/Overrides/be_users.php
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addUserSetting(
    'myCustomSetting',
    [
        'label' => 'LLL:EXT:my_ext/Resources/Private/Language/locallang.xlf:myCustomSetting',
        'config' => [
            'type' => 'check',
            'renderType' => 'checkboxToggle',
        ],
    ],
    'after:emailMeAtLogin'
);
Copied!

Page doktype allowed record types 

Page doktypes previously registered via PageDoktypeRegistry->add() in ext_tables.php should now use the TCA option allowedRecordTypes in Configuration/TCA/Overrides/pages.php.

Before:

ext_tables.php
\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(
    \TYPO3\CMS\Core\DataHandling\PageDoktypeRegistry::class
)->add(116, [
    'allowedTables' => ['tt_content', 'my_custom_record'],
]);
Copied!

After:

Configuration/TCA/Overrides/pages.php
$GLOBALS['TCA']['pages']['types']['116']['allowedRecordTypes'] = [
    'tt_content',
    'my_custom_record',
];
Copied!

Once all registrations have been moved, the ext_tables.php file can be removed from the extension.