Breaking: #97135 - Removed support for module handling based on TBE_MODULES_EXT

See forge#97135


Previously it had been possible to add additional functionality to TYPO3 backend modules, such as Web > Info or Web > Template, using the ExtensionManagementUtility::insertModuleFunction() API method, which attached a new entry to the global TBE_MODULES_EXT array.

Since the introduction of the new Module Registration API, all modules are registered in the dedicated Configuration/Backend/Modules.php configuration file. Additional modules, or "third-level modules" are now also registered via the new mechanism.

Therefore, the $GLOBALS['TBE_MODULES_EXT'] has been removed, while the corresponding ExtensionManagementUtility::insertModuleFunction() API method has no effect.

The related page TSconfig options as well as have been removed in favor of the existing hideModules user TSconfig option and the module access logic, which due to the new registration, now also covers those modules.

Additionally, the following hooks have been removed, because their use cases does no longer exist:

  • $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateModuleController']['newStandardTemplateView']
  • $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['TYPO3\CMS\Tstemplate\Controller\TypoScriptTemplateModuleController']['newStandardTemplateHandler']


The global TBE_MODULES_EXT array does no longer exist and the ExtensionManagementUtility::insertModuleFunction() API method no longer has any effect.

The page TSconfig options and are no longer evaluated.

Using one of mentioned, TypoScriptTemplateModuleController related hooks does no longer have any effect.

Affected Installations

All installations using the global TBE_MODULES_EXT array or calling ExtensionManagementUtility::insertModuleFunction() in custom extension code.

All installations using one of the removed page TSconfig options or one of the removed hooks.


Register your "third-level" module in our extension's Configuration/Backend/Modules.php file.

Previous configuration in ext_tables.php:


Will now be registered in Configuration/Backend/Modules.php:

'web_info_additional' => [
    'parent' => 'web_info',
    'access' => 'user',
    'path' => '/module/web/info/additional',
    'iconIdentifier' => 'module-my-icon-identifier',
    'labels' => [
        'title' => 'LLL:EXT:extkey/Resources/Private/Language/locallang.xlf:mod_title',
    'routes' => [
        '_default' => [
            'target' => MyAdditonalInfoModuleController::class . '::handleRequest',

To hide a "third-level" module in the doc header menu, use the user TSconfig options.hideModules option:

Page TSconfig
# before\CMS\Info\Controller\TranslationStatusController = 0
User TSconfig
# after
options.hideModules := addToList(web_info_translations)

Additionally, use the module access logic to restrict access to those modules.

Remove any registration of the mentioned hooks. There is no direct migration, since the use cases for those hooks do no longer exist.