Get Your Store Ready for Easter Sales -Flat 23% OFF on Entire Catalog Use Coupon -easter23

    Magento 2 File Structure – Folder, Module Directory Structure

    Knowing and understanding the folder structure can help you quite a bit when customizing codes or installing new extensions. The Module File/Folder structure for Magento is excessively complex which is why we going to cover all high-level files/folders instead of every single one. 

    1. Magento 2 File Structure

    While navigating your root folder, you’ll come across the following files:

    • app
    • phpserver
    • bin
    • setup
    • generated
    • var
    • dev
    • lib
    • pub
    • vendor

    Like in the image below.

    Each individual folder is made up of subfolders that include files. Let’s go through the contents that come with each file.

    app

    This file consists of Magento’s main code, it contains three key sub-directories, namely:

    • design 
    • i18n 
    • etc

    Amongst all of your modules, your customer should be counted in the app/code/<CompanyName>/<ModuleName> directory. You can also find third-party module recommendations here.

    • Design

    The design sub-directory includes sub-folders along with LESS and CSS files. The following two are examples of subfolders included under design.

    app/design/frontend 

    This subdirectory is a great place to store customized store themes

    app/design/adminhtml 

    You can store all admin related themes here.

    • i18n

    The i18n sub-directory basically stores language packages. It can be helpful for anyone wanting to establish a store supporting multiple languages.

    app/code 

    Here is where you’ll find core codes for Magento, you can develop and edit custom Magento codes. The availability of this sub-directory is based on your installation method. If you have downloaded the GitHub repository there will be an app/code directory.

    However, if you aren’t shown a code subfolder in the app folder, don’t worry, your Magento codes can be found in the vendor file. (Vendor file will be discussed in detail below). If you want to dodge any chance of custom and core modules mix up, you might want to keep all Magento core modules separately saved in the vendor directory.

    Use composer to store all of your installed packages. You can save your files under app/code/<CompanyName>, rather than working straight out of this folder and avoid any unnecessary overriding while upgrading vendor files.

    • etc

    This subdirectory contains interface preferences and class mapping in di.xml configuration. You can find ACL, configuration, admin and admin menu in this folder.

    phpserver

    • router.php

    This sub-directory is a file that you can employ to implement PHP to the built-in server. Please note that, it is not recommended to work in this file to avoid possibly leaving huge security gaps in your website.

    bin

    This directory includes the Magento file, in other words a CLI script that is executable. With this script you can easily activate certain commands such as disabling/enabling modules, disabling/enabling cache or re-indexing among others.

    setup

    As the name suggests, this directory consists of all files that are required during setup after installing Magento.

    generated

    Magneto generated codes are stored under this directory. By default, if you inject a certain class into a constructor Magento will generate a code to make non-existent factory classes.

    var

    In this folder you will find sessions, cache, composer_home, di, logs, database backups, view_processed, cached error reports and generated classes. You can produce the contents of various subdirectories including var/di after you run php bin/magento setup:di:compile.

    • var/log

    You will ordinarily find system.log and exception.log files under this sub-directory.

    • var/cache

    This sub-directory is there for all of Magento’s cache. To clear up cache, its recommended to use the php bin/magento cache:clean command to check out development changes.

    dev

    This folder holds a few tools and Magento 2 test scripts. It stores functional tests programmed to be run by Magento’s Test Framework.

    lib

    If you are looking for vendor or Magento library files, this file is what you need. It also has all of Magento’s non-module based codes.

    pub

    You might want to set this to be your web root on your server, because it basically includes all files that are publicly accessible. The pub directory contains security measures to help you restrict public access. Keep in mind that this folder includes static files generated by your Magento theme.

    • Index.php

    This is a controller stored under the pub directory. It can be used in production mode to run a file.  

    Vendor

    The framework core exists in this directory, where you will find no problem in installing additional modules. Any operations carried out in these files uses the composer.json file. The vendor file has no files or folders inside instead composer.json creates folders and files for you. Then you’ll be able to view various packages defined by composer.json.

    2. Component File Structure

    Now that we have covered the basics, let’s take a look at file structures and component types. Magento is designed to search for component-creating configuration files in targeted locations within the component file structure. To make sure the component type performs the correct function you have to

    In order to ensure the component type works properly, you need to pursue predefined file structures.

    Root Directory

    Any component’s root directory will match its name and contain relevant files and sub-directories.

    Based on Magento installation, a component’s root directory can be placed in either of the following two locations:

    • Magento install directory/app

      Now this is a logical component development location. You can smoothly create the following environment by cloning the GitHub repository for Magento 2.

      • Apply app/code for modules
      • Apply app/design/frontend for storefront themes
      • Apply app/design/adminhtml for Admin themes
      • Apply app/i18n for language packages
    • <Magento install directory>/vendor

    When you install Magento 2 marketplace and have EE or CE code downloaded as well, this location will be created by the composer. You can also find this location when you extract an archived compressed Magento 2 to install Magento.

    Required Files

    Components require:

    • registration.php

    This file registers a component with Magento. Its root directory, here, will also be used as the component’s name. Hence, components will, by default, be installed in <Magento root dir>/vendor directory.

    • etc/module.xml

    This file’s job is to define a component’s basic information such as version numbers or component dependencies. Versions numbers are used in order to conclude which data and schemes should be updated when you run bin/magento setup:upgrade.

    • composer.json

    This file is needed to determine dependencies required by the component at runtime. 

    3. Module file structure

    You can view a typical module file structure in the image here:

    Common Directories

    Below are a few common module directories:

    • Block

    Comprises of PHP view classes module logic Model View Controller(MVC) vertical implementation

    • Controller

    Comprises of PHP controller classes as a fragment of module logic MVC vertical implementation

    • Etc

    Comprises of configuration files; specifically the module.xml, which is needed

    • Model

    Comprises of PHP model classes as a fragment of module logic MVC vertical implementation

    • Setup

    Comprises of classes for data setup and module related database structure. During install/ upgrade such data is invoked.

    Additional Directories

    The following folders are great for additional configurations, ancillary functions or other items like plug-ins, localization and layout files.

    • API

    For PHP classes open to the API

    • Console

    For CLI commands

    • Cron

    For cron job definitions

    • CustomerData

    For section files

    • Helper

    For aggregated functionality

    • i18n

    For files of localization

    • Observer

    For files that execute listener commands

    • Plugin

    For any required plug-ins

    • UI

    For files of data generation

    • View

    For files that consist of design templates, email templates, static view files and layout files.

    4. Theme file structure

    You can view a typical theme file structure in the image here:

    Common Directories

    Below are classic theme directories:

    • Etc

    Comprises of configuration files. These include the view.xml file which has image related configurations for all thumbnails and images.

    • i18n

    Comprises of translation dictionaries, in the event that there are any

    • Media

    Comprises of theme preview images

    • Web

      Comprises of an optional directory. This optional directory is made up of static files systematized by the following files:

      • css/source

        The source file consists of LESS configuration files that invoke global features from Magento’s UI library. It also has a theme.less file that overrules default variables values.

      • css/source/lib

        This folder consists of files that override stored UI library files available in lib/web/css/source/lib

      • fonts

        Save various fonts to apply to your theme here

      • images

        Here you can view a number of static images

      • js

        This folder is dedicated to your JavaScript files

    5. Language package file structure

    This is how a directory structure would look like if you needed to operate in the French language:

    The top-level directory is the only directory needed for a language pack.

    Helpful Tip** to identify the locale, and increase better performance, match the directory name and ISO code.  

    Conclusion

    To summarize, File Structure has a supreme role in tailoring a Magento 2 website. But as long as you are aware of the functions and purpose of folders n the file structure you can be assured that your component file will operate effectively as soon as you create it.

    Avail The Oppurtunity

    Subscribe to Our Updates and Newsletters.