The module filesystem structure
Magento identifies itself as a highly modular platform. What this means is that there is literally a directory location where modules are placed. Let's take a peak at the individual module structure now. The following structure belongs to one of the simpler core Magento modules—the Contact module that can be found in vendor/magento/module-contact:
Blockcomposer.jsonControlleretcacl.xmladminhtmlsystem.xml
config.xmlemail_templates.xmlfrontenddi.xmlpage_types.xmlroutes.xml
module.xml
Helperi18nLICENSE_AFL.txtLICENSE.txtModelREADME.mdregistration.phpTestUnitBlockControllerHelperModel
viewadminhtmlfrontendlayoutcontact_index_index.xmldefault.xml
templatesform.phtml
Even though the preceding structure is for one of the simpler modules, you can see that it is still quite extensive.
The Block directory is where the view-related block PHP classes are located.
The Controller directory is where the controller-related PHP classes are stored. This is the code that responds to the storefront POST and GET HTTP actions.
The etc directory is where the module configuration files are present. Here, we can see files such as module.xml, di.xml, acl.xml, system.xml, config.xml, email_templates.xml, page_types.xml, routes.xml, and so on. The module.xml file is an actual module declaration file. We will look into the contents of some of these files in the later chapters.
The Helper directory is where various helper classes are located. These classes are usually used to abstract various store configuration values into the getter methods.
The i18n directory is where the module translation package CSV files are stored.
The Module directory is where the entities, resource entities, collections, and various other business classes can be found.
The Test directory stores the module unit tests.
The view directory contains all the module administrator and storefront template files (.phtml and .html) and static files (.js and .css).
Finally, the registration.php is a module registration file.