Create a directory structure
Extbase requires a particular directory structure. It is considered best practice to always stick to this structure.
On the first level EXT:tea has the following structure:
$ tree /path/to/extension/tea
├── Classes
├── Configuration
├── Documentation
├── Resources
├── Tests
├── composer.json
├── ext_emconf.php
├── ...
└── README.md
Directory Classes
The Classes/
folder should contain all the PHP classes provided by the
extension. Otherwise they will not be available in the default
autoloading. (See documentation on the Classes folder).
In the composer.
we define that all PHP classes are
automatically loaded from the Classes/
directory (also
defined in file:ext_
in legacy installations):
{
"name": "ttn/tea",
"autoload": {
"psr-4": {
"TTN\\Tea\\": "Classes/"
}
}
}
$EM_CONF[$_EXTKEY] = [
'autoload' => [
'psr-4' => [
'TTN\\Tea\\' => 'Classes/',
],
],
];
The key of the psr-4 array, here 'TTN\\
, defines the namespace
for all classes in order to be found by
PSR-4 autoloading.
The Classes/
folder contains subfolders:
$ tree path/to/extension/tea
├── Classes
├── Controller
├── Domain
| ├── Model
| └── Repository
└── ViewHelpers
Extbase is based on the pattern Model-View-Controller (MVC) so we have model and controller directories.
In most cases the view is handled by classes provided by the framework and configured via templating. Therefore a view folder is not required.
Additional logic needed for the view can be provided by ViewHelpers and should be stored in the respective viewhelper folder.
Note
ViewHelpers are a feature of the Fluid templating engine.
Directory Configuration
See also documentation on the Configuration folder.
The Configuration
folder contains several subfolders:
$ tree path/to/extension/tea
├── Configuration
├── FlexForms
├── TCA
| └── Overrides
├── TsConfig
| ├── Page
| └── User
├── TypoScript
| ├── constants.typoscript
| └── setup.typoscript
└── Services.yaml
Configuration/
Flex Forms/ - Contains the configuration of additional input fields to configure plugins using the FlexForm format.
Configuration/
TCA/ - Contains the TYPO3 configuration array (TCA) (PHP arrays).
Configuration/
TCA/ Overrides/ - Can be used to extend the TCA of other extensions. They can be extended by direct array manipulation or preferably by calls to API functions.
Configuration/
Ts Config/ - Contains TSconfig configuration for the TYPO3 backend on page or user level in TypoScript syntax. Our extension does not contain TSconfig, so the folder is only a placeholder here.
Configuration/
Typo Script/ - Contains TypoScript configuration for the frontend. In some contexts the configuration contained here is also used in the backend.
Configuration/
Services. yaml - Is used to configure technical aspects of the extension, including automatic wiring, automatic configuration and options for dependency injection. See also Services.yaml.
Directory Documentation/
The Documentation/
folder contains files from which
documentation is rendered. See Documentation.
Directory Resources/
See also documentation on the Resources folder.
The Resources/
folder contains two sub folders that are
further divided up:
$ tree /path/to/extension/tea
├── Resources
├── Private
| ├── Language
| ├── Layouts
| ├── Partials
| └── Templates
└── Public
├── CSS
├── Icons
├── Images
└── JavaScript
Resources/
Private - All resource files that are not directly loaded by the browser should go in this directory. This includes Fluid templating files and localization files.
Resources/
Public - All resource files that are directly loaded by the browser must go in this directory. Otherwise they are not accessible (depending on the setup of the installation).
Directory Tests/
Contains automatic tests (topic not covered by this tutorial).
Hint
If you want to learn more about automatic code checks see documentation of tea and the chapter on Testing in this manual.