Créer un Module Magento 2 de A à Z (Guide 2026)
Magento 2 est l’une des plateformes eCommerce les plus extensibles disponibles. Créer un module personnalisé de A à Z est une compétence fondamentale qui permet des personnalisations métier, des intégrations tierces et des optimisations de performances sans modifier les fichiers cœur de Magento.
Table des matières
- Prérequis
- Structure du module
- Créer la structure des répertoires
- registration.php
- module.xml
- Activer le module
- Ajouter un contrôleur et une route
- Créer un modèle et un ResourceModel
- Injection de dépendances
- Observateur / Événement
- Meilleures pratiques de déploiement
- Erreurs courantes
- FAQ
Prérequis
| Composant | Version recommandée |
|---|---|
| Magento / Adobe Commerce | 2.4.7 – 2.4.8 |
| PHP | 8.2 ou 8.3 |
| Composer | 2.x |
| MySQL / MariaDB | 8.0+ |
| Elasticsearch / OpenSearch | 8.x |
Astuce SEO : Si vous développez une extension pour distribution sur Adobe Commerce Marketplace, suivez les normes de codage officielles dès le départ.
Structure du module
Un module Magento 2 typique suit une architecture stricte :
app/code/Vendor/ModuleName/
├── registration.php
├── etc/
├── Controller/
├── Model/
├── Block/
├── view/
└── Setup/
Étape 1 — Créer la structure des répertoires
mkdir -p app/code/MagentoMastery/HelloWorld/etc/frontend
mkdir -p app/code/MagentoMastery/HelloWorld/Controller/Index
mkdir -p app/code/MagentoMastery/HelloWorld/Model/ResourceModel/ExampleModel
mkdir -p app/code/MagentoMastery/HelloWorld/view/frontend/{layout,templates}
mkdir -p app/code/MagentoMastery/HelloWorld/Setup
Étape 2 — registration.php
use Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(
ComponentRegistrar::MODULE,
'MagentoMastery_HelloWorld',
__DIR__
);
Étape 3 — module.xml
<module name="MagentoMastery_HelloWorld" setup_version="1.0.0">
</module>
Étape 4 — Activer le module
php bin/magento module:enable MagentoMastery_HelloWorld
php bin/magento setup:upgrade
php bin/magento setup:di:compile
php bin/magento cache:flush
Étape 5 — Ajouter un contrôleur et une route
Définissez votre route dans routes.xml et créez un contrôleur implémentant HttpGetActionInterface.
Bonne pratique pour 2026 : Préférez HttpGetActionInterface et HttpPostActionInterface plutôt que d’étendre la classe Action obsolète.
Étape 6 — Créer un modèle et un ResourceModel
Magento utilise le pattern Modèle / ResourceModel / Collection :
- Modèle : Logique métier
- ResourceModel : Accès à la base de données
- Collection : Récupération et filtrage des données
Étape 7 — Injection de dépendances
Exemple di.xml :
<preference for="Vendor\Module\Api\ExampleInterface"
type="Vendor\Module\Model\ExampleModel"/>
Étape 8 — Observateur / Événement
Les observateurs permettent de réagir aux événements Magento sans modifier les classes cœur.
Exemple d’événement :
<event name="catalog_product_save_after">
<observer name="vendor_product_save"
instance="Vendor\Module\Observer\ProductSaveAfter"/>
</event>
Étape 9 — Meilleures pratiques de déploiement
php bin/magento setup:upgrade
php bin/magento setup:di:compile
php bin/magento setup:static-content:deploy -f
php bin/magento cache:flush
Meilleures pratiques de développement
- Utilisez
declare(strict_types=1). - Préférez l’injection de dépendances par constructeur.
- Évitez l’utilisation directe d’ObjectManager.
- Utilisez les Schema/Data Patches plutôt que InstallSchema lorsque c’est possible.
- Écrivez des tests unitaires et d’intégration.
- Suivez les normes de codage PSR-12.
Erreurs courantes
| Erreur | Cause | Solution |
|---|---|---|
| Module introuvable | Nom de module incorrect | Vérifiez registration.php et module.xml |
| Code de zone non défini | Implémentation de contrôleur incorrecte | Utilisez HttpGetActionInterface |
| Impossible d’instancier l’interface | Préférence DI manquante | Configurez di.xml |
| Page blanche | Erreur PHP | Vérifiez les logs |
| Problèmes de cache | Configuration obsolète | Videz le cache |
FAQ
Dois-je utiliser InstallSchema ou DB Patches ?
Les DB Patches (DataPatchInterface et SchemaPatchInterface) sont l’approche recommandée dans les versions modernes de Magento.
Mon module retourne une erreur 404. Que dois-je vérifier ?
- Vérifiez
routes.xml - Vérifiez le nom et la casse du contrôleur
- Videz le cache
- Recompilez le DI
Conclusion
Vous avez désormais les bases d’un module Magento 2 prêt pour la production, incluant contrôleurs, modèles, injection de dépendances et observateurs.
Prochaines étapes :
- Implémenter des Service Contracts
- Créer des API REST personnalisées
- Explorer les résolveurs GraphQL
- Ajouter des tests d’intégration
- Personnaliser le checkout Magento 2 — ajouter des champs, surcharger les composants Knockout et créer des étapes personnalisées
Besoin d’un module prêt pour la production selon les standards Magento ? Voir mes services de développement de modules personnalisés .