Introduzione
Quando le estensioni di mercato non bastano, conviene creare un modulo Magento 2 personalizzato. Vediamo lo scaffold minimo necessario, partendo dalla struttura di directory ai file XML di registrazione.
Struttura base
Sotto app/code creiamo Vendor/Modulo con questa struttura tipica:
app/code/Vendor/Modulo/
etc/module.xml
etc/di.xml
etc/frontend/routes.xml
etc/adminhtml/menu.xml
Controller/Index/Index.php
Block/Example.php
view/frontend/layout/
view/frontend/templates/
registration.php
composer.json
registration.php
Registra il modulo nel sistema:
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Vendor_Modulo',
__DIR__
);
module.xml
Dichiara il modulo con setup_version e dipendenze:
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Vendor_Modulo" setup_version="1.0.0">
<sequence><module name="Magento_Catalog"/></sequence>
</module>
</config>
composer.json
Permette di distribuire il modulo via Composer e versione:
{ "name": "vendor/modulo", "type": "magento2-module", "version": "1.0.0", "autoload": { "files": ["registration.php"], "psr-4": { "Vendor\\Modulo\\": "" } } }
Controller frontend
Routes.xml definisce il route_id, il controller risponde all'URL /modulo/index/index estendendo \Magento\Framework\App\Action\Action. Restituisce un layout tramite resultPageFactory.
Abilitazione
php bin/magento module:enable Vendor_Modulophp bin/magento setup:upgradephp bin/magento setup:di:compilephp bin/magento cache:flush
InstallSchema vs DB schema XML
Da Magento 2.3 si usa etc/db_schema.xml dichiarativo invece di Setup/InstallSchema.php. Si descrivono tabelle, colonne e indici in formato XML, generando automaticamente migrazioni reversibili.
Best practice
Mantenere nome vendor e modulo coerenti, evitare modifiche al core, sfruttare plugin e observer invece di rewrite, scrivere test unitari e integrazione fin da subito.
Hai bisogno di aiuto?
Se vuoi un Magento ottimizzato dal team di G Tech Group, scrivici tramite il modulo di contatto.