Modules.php - Backend module configuration
Changed in version 12.0
Registration of backend modules was changed with version 12. If you are using an older version of TYPO3 please use the version switcher on the top left of this document to go to the respective version.
The configuration of backend modules is placed in the
dedicated Configuration/
configuration file.
See also the Backend module configuration examples.
Note
The Configuration/
configuration files are
read and processed when building the container. This
means the state is fixed and cannot be changed at runtime.
Table of contents
Module configuration options
parent
-
- Type
- string
If the module should be a submodule, the parent identifier, for example
web
has to be set here. Have a look into the list of available toplevel modules.Extensions can add additional parent modules, see Toplevel modules.
path
-
- Type
- string
- Default
/module/<main
Module>/<sub Module>
Define the path to the default endpoint. The path can be anything, but will fallback to the known
/module/<main
pattern, if not set.Module>/<sub Module>
access
-
- Type
- string
Can be
user
(editor permissions),admin
, orsystem
.Maintainer
workspaces
-
- Type
- string
Can be
*
(= always),live
oroffline
. If not set, the value of the parent module - if any - is used.
position
-
- Type
- array
The module position. Allowed values are
top
andbottom
as well as the key value pairsbefore => <identifier>
andafter => <identifier>
.
appearance
-
- Type
- array
Allows to define additional appearance options. Currently only appearance.renderInModuleMenu is available.
appearance.renderInModuleMenu
-
- Type
- bool
If set to false the module is not displayed in the module menu.
iconIdentifier
-
- Type
- string
The module icon identifier
icon
-
- Type
- string
Path to a module icon (Deprecated: Use iconIdentifier instead)
labels
-
- Type
- array of strings or string
An
array
with the following keys:title
description
short
Description
The value of each array entry can either be a
string
containing the static text, or a locallang label reference.Alternatively define the path of a locallang file reference. A referenced file should contain the following label keys:
mlang_
(used as module title)tabs_ tab mlang_
(used as module description)labels_ tabdescr mlang_
(used as module short description)labels_ tablabel
component
-
- Type
- string
- Default
- TYPO3/CMS/Backend/Module/Iframe
The view component, responsible for rendering the module.
navigationComponent
-
- Type
- string
The module navigation component. The following are provided by the Core:
@typo3/
backend/ page- tree/ page- tree- element - The page tree as used in the Web module.
@typo3/
backend/ tree/ file- storage- tree- container - The file tree as used in the Filelist module.
navigationComponentId
-
- Type
- string
The module navigation component (Deprecated: Use navigationComponent)
inheritNavigationComponentFromMainModule
-
- Type
- bool
- Default
- true
Whether the module should use the parents navigation component. This option defaults to
true
and can therefore be used to stop the inheritance for submodules.
moduleData
-
- Type
- array
All properties of the module data object that may be overridden by
GET
/POST
parameters of the request get their default value defined here.Example
aliases
-
- Type
- array
List of identifiers that are aliases to this module. Those are added as route aliases, which allows to use them for building links, for example with the
\TYPO3\
. Additionally, the aliases can also be used for references in other modules, for example to specify a module's parent.CMS\ Backend\ Routing\ Uri Builder Examples
Example for a new module identifier:
<?php declare(strict_types=1); return [ 'workspaces_admin' => [ 'parent' => 'web', // ... // choose the previous name or an alternative name 'aliases' => ['web_WorkspacesWorkspaces'], ], ];
Example for a route alias identifier:
routeOptions
-
- Type
- array
Generic side information that will be merged with each generated
\TYPO3\
array. This can be used for information, that is not relevant for a module aspect, but more relevant for the routing aspect, for example sudo mode.CMS\ Backend\ Routing\ Route::$options
Default module configuration options (without Extbase)
routes
-
- Type
- array
Define the routes to this module. Each route requires at least the
target
. The_default
route is mandatory, except for modules which can fall back to a submodule. Thepath
of the_default
route is taken from the top-level configuration. For all other routes, the route identifier is taken aspath
, if not explicitly defined. Each route can define any controller/action pair and can restrict the allowed HTTP methods:<?php declare(strict_types=1); use MyVendor\MyExtension\Classes\Controller\AnotherController; use MyVendor\MyExtension\Classes\Controller\MyModuleController; return [ 'my_module' => [ // ... 'routes' => [ '_default' => [ 'target' => MyModuleController::class . '::overview', ], 'edit' => [ 'path' => '/edit-me', 'target' => MyModuleController::class . '::edit', ], 'manage' => [ 'target' => AnotherController::class . '::manage', 'methods' => ['POST'], ], ], ], ];
All subroutes are automatically registered in a
\TYPO3\
. The full syntax for route identifiers isCMS\ Core\ Routing\ Route Collection <module_
, for example,identifier>.<sub_ route> my_
. Therefore, using themodule. edit \TYPO3\
to create a link to such a sub-route might look like this:CMS\ Backend\ Routing\ Uri Builder \TYPO3\CMS\Backend\Routing\UriBuilder->buildUriFromRoute('my_module.edit');
Copied!
Extbase module configuration options
Note
Using these Extbase configurations tells the Core to bootstrap Extbase and expecting
controllers based on \TYPO3\
.
Do not use it for non-Extbase controller. Use routes
instead.
extensionName
-
- Type
- string
The extension name in UpperCamelCase for which the module is registered. If the extension key is
my_
the extension name would beexample_ extension My
.Example Extension
controllerActions
-
- Type
- array
Define the controller action pair. The array keys are the controller class names and the values are the actions, which can either be defined as array or comma-separated list:
<?php declare(strict_types=1); use MyVendor\MyExtension\Controller\MyModuleController; return [ 'web_ExtkeyExample' => [ //... 'path' => '/module/web/ExtkeyExample', 'controllerActions' => [ MyModuleController::class => [ 'list', 'detail', ], ], ], ];
The modules define explicit routes for each controller/action combination, as long as the
enable
feature toggle is turned off (which is the default). This effectively means human-readable URLs, since the controller/action combinations are no longer defined via query parameters, but are now part of the path.Namespaced Arguments For Backend This leads to the following URLs:
https://
example. com/ typo3/ module/ web/ Extkey Example https://
example. com/ typo3/ module/ web/ Extkey Example/ My Module Controller/ list https://
example. com/ typo3/ module/ web/ Extkey Example/ My Module Controller/ detail
The route identifier of corresponding routes is registered with similar syntax as standard backend modules:
<module_
. Above configuration will therefore register the following routes:identifier>.<controller>_<action> web_
Extkey Example web_
Extkey Example. My Module Controller_ list web_
Extkey Example. My Module Controller_ detail
Debug the module configuration
All registered modules are stored as objects in a registry. They can be viewed in the backend in the System > Configuration > Backend Modules module.
The ModuleProvider API allows extension authors to work with the registered modules.
Backend modules with sudo mode
You can configure the sudo mode in your backend module like this:
<?php
use TYPO3\CMS\Backend\Security\SudoMode\Access\AccessLifetime;
return [
'tools_ExtensionmanagerExtensionmanager' => [
// ...
'routeOptions' => [
'sudoMode' => [
'group' => 'systemMaintainer',
'lifetime' => AccessLifetime::M,
],
],
],
];