-- optional

ext_tables.php is not always included in the global scope of the frontend context.

This file is only included when

  • a TYPO3 Backend or CLI request is happening
  • or the TYPO3 Frontend is called and a valid backend user is authenticated

This file usually gets included later within the request and after TCA information is loaded, and a backend user is authenticated.

Should not be used for

Should be used for

These are the typical functions that should be placed inside ext_tables.php


Put the following in a file called ext_tables.php in the main directory of your extension. The file does not need to be registered but will be loaded automatically:

// all use statements must come first
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;

defined('TYPO3') or die();

(function () {
  // Add your code here

Registering a backend module

You can register a new backend module for your extension via ExtensionUtility::registerModule():

// use TYPO3\CMS\Extbase\Utility\ExtensionUtility;

   'ExtensionName', // Extension Name in CamelCase
   'web', // the main module
   'mysubmodulekey', // Submodule key
   'bottom', // Position
       'MyController' => 'list,show,new',
       'access' => 'user,group',
       'icon'   => 'EXT:my_extension/ext_icon.svg',
       'labels' => 'LLL:EXT:my_extension/Resources/Private/Language/locallang_statistics.xlf',

There is also a possibility to register modules without Extbase, using core functionality only. For more information on backend modules see backend module API.

Allowing a tables records to be added to Standard pages

By default new records of tables may only be added to Sysfolders in TYPO3. If you need to allow new records of your table to be added on Standard pages call:

// use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;


Read why the check for the TYPO3 constant is necessary.

Registering a scheduler task

Scheduler tasks get registered in the ext_tables.php as well. Note that the Sysext "scheduler" has to be installed for this to work.

// use TYPO3\CMS\Scheduler\Task\CachingFrameworkGarbageCollectionTask;
// use TYPO3\CMS\Scheduler\Task\CachingFrameworkGarbageCollectionAdditionalFieldProvider;

// Add caching framework garbage collection task
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['scheduler']['tasks'][CachingFrameworkGarbageCollectionTask::class] = array(
     'extension' => 'your_extension_key',
     'title' => 'LLL:EXT:your_extension_key/locallang.xlf:cachingFrameworkGarbageCollection.name',
     'description' => 'LLL:EXT:your_extension_key/locallang.xlf:cachingFrameworkGarbageCollection.description',
     'additionalFields' => \CachingFrameworkGarbageCollectionAdditionalFieldProvider::class

For more information see the documentation of the Sys-Extension scheduler.