Skip to content
beginner Phase 16 · Adminhtml, Web API & Cron Areas

Magento 2 Modules

What Magento modules are, module lifecycle, enabling/disabling, dependencies, and module list.

1h
0 problems
Topic Progress 0%

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:upgrade to 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 loaded
  • disable - Module code exists but is not loaded
  • uninstall - 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:

  1. 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>
  1. 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:upgrade applies 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:

  1. Magento scans app/code/ and vendor/ directories
  2. Looks for registration.php files
  3. Calls ComponentRegistrar::register() for each module
  4. Builds module list from app/etc/config.php
  5. 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?

Question 1 options

2. What does setting a module to state 'disable' do?

Question 2 options

3. What happens when you increase a module's setup_version?

Question 3 options

Flashcards

Question

What is the minimum file structure for a Magento 2 module?

Answer

registration.php and etc/module.xml

Question

What does ComponentRegistrar::register() do?

Answer

Registers the module path with Magento's component system

Question

What does the sequence element in module.xml define?

Answer

Module load order and hard dependencies

Question

What command enables a Magento 2 module?

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)