Come Creare un Modulo Magento 2 da Zero

Sviluppare un modulo Magento 2 personalizzato è una competenza fondamentale per ogni sviluppatore che lavora con questa piattaforma di e-commerce. In questa guida completa, esploreremo passo dopo passo come creare un modulo Magento 2 da zero, seguendo le best practices e gli standard di sviluppo della piattaforma.

Prerequisiti e Struttura Base

Prima di iniziare lo sviluppo del nostro modulo Magento 2, è importante comprendere l'architettura modulare della piattaforma. Magento 2 segue il pattern Model-View-Controller (MVC) e utilizza un sistema di dependency injection avanzato.

Requisiti del Sistema

Per sviluppare un modulo Magento 2 efficace, assicurati di avere:

  • Un'installazione funzionante di Magento 2
  • Conoscenza di PHP 7.4+ e delle sue funzionalità OOP
  • Familiarità con XML per la configurazione
  • Comprensione dei design patterns utilizzati da Magento

Anatomia di un Modulo Magento 2

Ogni modulo Magento 2 deve rispettare una struttura di cartelle specifica. La directory principale del modulo si trova in app/code/Vendor/ModuleName/ e deve contenere almeno:

  • registration.php: File di registrazione del modulo
  • etc/module.xml: File di configurazione principale
  • composer.json: Definisce le dipendenze del modulo

Creazione della Struttura Base del Modulo

Iniziamo creando un modulo di esempio chiamato "ProductReviews" sotto il vendor "MagentoAcademy". La struttura completa sarà: app/code/MagentoAcademy/ProductReviews/

Step 1: File di Registrazione

Il primo file da creare è registration.php nella root del modulo:

Step 2: Configurazione del Modulo

Crea la directory etc/ e il file module.xml:



    
        
            
            
        
    

Step 3: Composer Configuration

Il file composer.json definisce le informazioni del pacchetto e le dipendenze:

{
    "name": "magento-academy/module-product-reviews",
    "description": "Custom product reviews module for Magento 2",
    "type": "magento2-module",
    "version": "1.0.0",
    "license": ["OSL-3.0", "AFL-3.0"],
    "require": {
        "php": "~7.4.0|~8.1.0",
        "magento/framework": "*",
        "magento/module-catalog": "*",
        "magento/module-customer": "*"
    },
    "autoload": {
        "files": ["registration.php"],
        "psr-4": {
            "MagentoAcademy\\ProductReviews\\": ""
        }
    }
}

Implementazione del Model Layer

Il layer Model è il cuore della logica business del nostro modulo Magento 2. Implementeremo un sistema completo per gestire le recensioni dei prodotti.

Creazione del Model

Crea il file Model/Review.php:

_init(\MagentoAcademy\ProductReviews\Model\ResourceModel\Review::class);
    }

    public function getIdentities()
    {
        return [self::CACHE_TAG . '_' . $this->getId()];
    }

    public function getReviewId()
    {
        return $this->getData(self::REVIEW_ID);
    }

    public function setReviewId($reviewId)
    {
        return $this->setData(self::REVIEW_ID, $reviewId);
    }

    public function getProductId()
    {
        return $this->getData(self::PRODUCT_ID);
    }

    public function setProductId($productId)
    {
        return $this->setData(self::PRODUCT_ID, $productId);
    }

    public function getCustomerId()
    {
        return $this->getData(self::CUSTOMER_ID);
    }

    public function setCustomerId($customerId)
    {
        return $this->setData(self::CUSTOMER_ID, $customerId);
    }

    public function getTitle()
    {
        return $this->getData(self::TITLE);
    }

    public function setTitle($title)
    {
        return $this->setData(self::TITLE, $title);
    }

    public function getContent()
    {
        return $this->getData(self::CONTENT);
    }

    public function setContent($content)
    {
        return $this->setData(self::CONTENT, $content);
    }

    public function getRating()
    {
        return $this->getData(self::RATING);
    }

    public function setRating($rating)
    {
        return $this->setData(self::RATING, $rating);
    }
}

Resource Model

Crea il Resource Model in Model/ResourceModel/Review.php:

_init('magentoacademy_product_reviews', 'review_id');
    }
}

Collection Model

Implementa la Collection in Model/ResourceModel/Review/Collection.php:

_init(
            \MagentoAcademy\ProductReviews\Model\Review::class,
            \MagentoAcademy\ProductReviews\Model\ResourceModel\Review::class
        );
    }
}

Configurazione Database e Setup

Per gestire i dati del nostro modulo Magento 2, dobbiamo creare le tabelle del database utilizzando il sistema di setup di Magento.

Database Schema

Crea il file etc/db_schema.xml:



    
        
        
        
        
        
        
        
        
        
        
            
        
        
        
        
        
        
        
            
        
        
        
            
        
    

API e Service Contracts

Magento 2 promuove l'uso di Service Contracts per garantire la stabilità delle API. Implementiamo le interfacce per il nostro modulo.

Data Interface

Crea Api/Data/ReviewInterface.php:

Repository Interface

Implementa il Repository pattern in Api/ReviewRepositoryInterface.php:

Controller e Routing

I controller gestiscono le richieste HTTP nel nostro modulo Magento 2. Configuriamo il routing e implementiamo un controller di base.

Configurazione Routes

Crea etc/frontend/routes.xml:



    
        
            
        
    

Controller Implementation

Implementa un controller per visualizzare le recensioni in Controller/Index/Index.php: