Magento 2 werkt op basis van modules — losstaande componenten die functionaliteit toevoegen of overschrijven. Als je maatwerk gedrag wil toevoegen zonder de core te raken, bouw je een eigen module. Hier is hoe dat werkt.
Basisstructuur van een Magento 2 module
app/code/Vendor/ModuleName/
├── etc/
│ ├── module.xml
│ └── di.xml
├── registration.php
└── composer.json
registration.php:
use Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(
ComponentRegistrar::MODULE,
'Vendor_ModuleName',
__DIR__
);
etc/module.xml:
<config>
<module name="Vendor_ModuleName" setup_version="1.0.0">
<sequence>
<module name="Magento_Catalog"/>
</sequence>
</module>
</config>
Dependency Injection in Magento 2
Magento gebruikt een krachtige DI-container. Je injecteert dependencies via de constructor — nooit via ObjectManager::getInstance() in productie-code.
public function __construct(
\Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
\Psr\Log\LoggerInterface $logger
) {
$this->productRepository = $productRepository;
$this->logger = $logger;
}
Plugins (interceptors)
Plugins laten je methodes van bestaande klassen aanpassen zonder ze te extenden. Drie types: before, around, after.
<!-- etc/di.xml -->
<type name="Magento\Catalog\Model\Product">
<plugin name="vendor_custom_plugin" type="Vendor\ModuleName\Plugin\ProductPlugin"/>
</type>
Events en observers
Voor losse koppeling gebruik je events:
<!-- etc/events.xml -->
<event name="catalog_product_save_after">
<observer name="vendor_product_save" instance="Vendor\ModuleName\Observer\ProductSaveObserver"/>
</event>
Module activeren
bin/magento module:enable Vendor_ModuleName
bin/magento setup:upgrade
bin/magento cache:flush
Conclusie
Eigen modules bouwen geeft je de volle flexibiliteit van Magento zonder de core aan te raken — dat is cruciaal voor upgrades. Wil je een complexere Magento ontwikkeling of een volledige webshop op maat? Bekijk onze Magento laten bouwen pagina.