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.

Heb je vragen over dit onderwerp of wil je samenwerken?

Neem contact op