Modulo personalizzato Magento 2: scaffold

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

  1. php bin/magento module:enable Vendor_Modulo
  2. php bin/magento setup:upgrade
  3. php bin/magento setup:di:compile
  4. php 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.

Hai trovato utile quest'articolo?