What Is a Magento 2 Module?
A Magento 2 module is a self-contained package of code that extends or modifies Magento's functionality. Every feature in Magento is implemented as a module - from catalog management to checkout to payment processing.
Module components:
- registration.php - Registers the module with Magento's ComponentRegistrar
- module.xml - Declares module name, version, and dependencies
- etc/ - Configuration files (di.xml, routes.xml, events.xml, etc.)
- Api/ - Service contract interfaces
- Model/ - Business logic and data models
- Controller/ - Request handlers
- Block/ - View layer logic
- view/ - Templates, layouts, CSS, JavaScript
- Setup/ - Database schema and data install/upgrade scripts
Minimum module structure:
app/code/Vendor/Module/
├── registration.php
└── etc/
└── module.xml
registration.php:
<?php
use Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(
ComponentRegistrar::MODULE,
'Vendor_Module',
__DIR__
);
module.xml:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Vendor_Module" setup_version="1.0.0">
<sequence>
<module name="Magento_Catalog"/>
</sequence>
</module>
</config>
Module Lifecycle
Magento 2 modules go through several lifecycle stages, each managed by specific commands and configuration.
1. Development Phase:
- Create module directory and registration.php
- Define module.xml with dependencies
- Implement module functionality
- Run
setup:upgradeto install/upgrade schema
2. Installation:
# Enable module
php bin/magento module:enable Vendor_Module
# Run upgrades and compile
php bin/magento setup:upgrade
php bin/magento setup:di:compile
php bin/magento cache:clean
3. Disabling:
# Disable module (keeps code, removes config)
php bin/magento module:disable Vendor_Module
# Remove module completely
php bin/magento module:uninstall Vendor_Module
4. Uninstallation:
# Full uninstall (deletes code, database, config)
php bin/magento module:uninstall --clear-static-content Vendor_Module
Module states:
enable- Module is active and loadeddisable- Module code exists but is not loadeduninstall- Module is removed from the system
Check module status:
php bin/magento module:status
php bin/magento module:status Vendor_Module
View enabled modules in app/etc/config.php - this file contains the master list of all enabled modules.
Module Dependencies
Module dependencies in Magento 2 ensure proper load order and prevent conflicts between modules.
Dependency types:
- Hard dependencies - Module cannot function without the dependency
<module name="Vendor_Module" setup_version="1.0.0">
<sequence>
<module name="Magento_Catalog"/>
<module name="Magento_Customer"/>
</sequence>
</module>
- Soft dependencies - Module works better with the dependency but can function without it
<module name="Vendor_Module" setup_version="1.0.0">
<sequence/>
<suggest>
<module name="Magento_Inventory"/>
</suggest>
</module>
Dependency rules:
- Circular dependencies are not allowed
- Dependencies are loaded in sequence order
- Module version numbers track schema changes
setup:upgradeapplies pending upgrades in dependency order
Resolve dependency conflicts:
# Check for dependency issues
php bin/magento setup:di:compile 2>&1 | grep -i dependency
# View module sequence
php bin/magento module:status --version
Module version management:
<!-- Module version upgrades -->
<module name="Vendor_Module" setup_version="2.0.0">
<sequence>
<module name="Magento_Catalog" setup_version="2.4.0"/>
</sequence>
</module>
When setup_version increases, Magento runs the corresponding UpgradeSchema and UpgradeData scripts in the module's Setup/ directory.
Module Discovery and Registration
Magento discovers modules through the ComponentRegistrar system and maintains a module list in configuration.
Module discovery process:
- Magento scans
app/code/andvendor/directories - Looks for
registration.phpfiles - Calls
ComponentRegistrar::register()for each module - Builds module list from
app/etc/config.php - Loads enabled modules in dependency order
Registration with area codes:
<?php
// app/code/Vendor/Module/registration.php
use Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(
ComponentRegistrar::MODULE,
'Vendor_Module',
__DIR__
);
Module list in config.php:
// app/etc/config.php (excerpt)
return [
'modules' => [
'Magento_Catalog' => 1, // 1 = enabled
'Magento_Customer' => 1,
'Vendor_Module' => 1,
'Magento_SomeDisabledModule' => 0, // 0 = disabled
]
];
Listing all modules:
# Show enabled modules
php bin/magento module:status
# Show specific module status
php bin/magento module:status Vendor_Module
# Show modules with versions
php bin/magento module:status --version
Force module refresh:
# Rebuild module list
php bin/magento setup:upgrade --force
# Clear module configuration cache
php bin/magento cache:clean config
Quiz
1. What file registers a Magento 2 module with the ComponentRegistrar?
2. What does setting a module to state 'disable' do?
3. What happens when you increase a module's setup_version?
Flashcards
Question
What is the minimum file structure for a Magento 2 module?
Click to reveal answer
Answer
registration.php and etc/module.xml
Question
What does ComponentRegistrar::register() do?
Click to reveal answer
Answer
Registers the module path with Magento's component system
Question
What does the sequence element in module.xml define?
Click to reveal answer
Answer
Module load order and hard dependencies
Question
What command enables a Magento 2 module?
Click to reveal answer
Answer
php bin/magento module:enable Vendor_Module
Revision Notes
Key Takeaways
- 1. A module is the basic unit of Magento 2 functionality
- 2. registration.php registers the module, module.xml declares it
- 3. Module states: enable, disable, uninstall
- 4. Dependencies defined in module.xml sequence element
- 5. Module list stored in app/etc/config.php
- 6. setup:upgrade processes schema and data changes
Interview Tips
- • Describe the minimum files needed for a Magento 2 module
- • Explain the module discovery and registration process
- • Discuss module dependencies and why they matter
- • Describe the difference between disable and uninstall
- • Know how to check module status and resolve conflicts
Cheat Sheet
Module Cheat Sheet
Min Files: registration.php + etc/module.xml
Config: app/etc/config.php
CLI Commands:
php bin/magento module:enable Vendor_Module
php bin/magento module:disable Vendor_Module
php bin/magento module:status
php bin/magento setup:upgrade
module.xml Structure:
<module name="Vendor_Module" setup_version="1.0.0">
<sequence>
<module name="Magento_Catalog"/>
</sequence>
</module>
Module States: enabled (1) / disabled (0)