Come creare un modulo in Magento 2 – Guida allo sviluppo – Parte I

creare-modulo.magento2-parteI

Qualche tutorial fa abbiamo scoperto come installare la nuova versione 2 di Magento (Installare Magento 2: Guida Completa) ed in altri abbiamo imparato ad interfacciarci con il backend per la sua configurazione (vedi sezione Magento 2 del sito).

Cominciamo ora ad intraprendere la strada dello sviluppo sulla nuova piattaforma, partendo dalla creazione di un modulo, vista l’importanza che da sempre Magento ripone verso il tema della modularità, mostrando ove possibile le differenze con la programmazione di estensioni su Magento 1 (vedi gli articoli: Come creare un modulo in Magento 1 – Guida allo sviluppo – Parte 1 e Come creare un modulo in Magento 1 – Guida allo sviluppo – Parte 2).

Il primo passaggio da compiere, come sempre, è la registrazione del modulo stesso. E già in questa fase sono evidenti le prime differenze con il predecessore Magento 1; in Magento 2, per registrare un’estensione occorre creare nella cartella <base_dir>/app/code/ la seguente struttura di directory con relativi file: <vendorName>/<moduleName>/etc/module.xml e <vendorName>/<moduleName>/registration.php

E’ facile notare un altro grande cambiamento apportato in Magento 2: non esistono più i code pool (core, community, local) e, per la precisione, se si volesse sviluppare il plugin con l’intenzione di distribuirlo, il posto corretto dove inserire la struttura del nostro modulo sarebbe <base_dir>/vendor/ invece che <base_dir>/app/code/, dopo aver preparato correttamente il file composer.json del modulo, con la seguente nomenclatura <base_dir>/vendor/<vendor-composer-namespace>/<moduleName>. Inoltre in Magento 2 tutti gli elementi che compongono un modulo (codice, templates, CSS, JS, traduzioni ecc.) sono inseriti nella stessa cartella; questa scelta implementativa rende molto più semplice lo sviluppo ed il mantenimento di un’estensione.

Supponendo come nome del vendor ‘WaPoNe’ e ‘HelloWorld’ invece come nome del modulo, analizziamo nello specifico i due file prima riportati:

<base_dir>/app/code/WaPoNe/HelloWorld/etc/module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
  <module name="WaPoNe_HelloWorld" setup_version="1.0.0">
   <sequence>
     <module name="Magento_Catalog"/>
   </sequence>
 </module>
</config>

Due considerazioni importanti sul contenuto del file module.xml: in Magento 2, i file xml utili per le configurazioni utilizzano XML Style Definition (XSD) per la definizione della loro struttura. In questo caso, il file XSD utilizzato per la definizione del file module.xml è <base_dir>/vendor/magento/framework/Module/etc/module.xsd

L’altro appunto è relativo al tag <sequence> che permette di definire quelle che per Magento 2 sono le dipendenze “soft” (dependency è un tema molto a cuore a Magento 2); in pratica comunicano al sistema che il nostro modulo deve essere caricato successivamente al caricamento dei moduli listati in <sequence> ed inoltre, se tali moduli non dovessero esistere nell’installazione, il nostro modulo funzionerebbe lo stesso. Le dipendenze “hard” invece devono essere dichiarate all’interno del file composer.json e l’assenza di uno dei moduli o librerie o componenti dai quali il nostro plugin dipende rende impossibile l’esecuzione dello stesso.

<base_dir>/app/code/WaPoNe/HelloWorld/registration.php

<?php

\Magento\Framework\Component\ComponentRegistrar::register(
 \Magento\Framework\Component\ComponentRegistrar::
 MODULE,
 'WaPoNe_HelloWorld',
 __DIR__
);

Questo file segue un tipico pattern e l’unica parte che va modificata è il nome del modulo; nel nostro caso ‘WaPoNe_HelloWorld’.

A questo punto, nuova caratteristica aggiuntiva di Magento 2: lo strumento ‘magento’.

magento è uno script contenuto all’interno della cartella <base_dir>/bin/ che ci permette di eseguire vari comandi direttamente da linea di comando. Offre quelle che in Magento 1 erano funzionalità messe a disposizione da tool esterni come n98magerun e wiz.

Per avere una lista delle funzionalità che mette a disposizione basta eseguire, dalla root di Magento (<base_dir>/), il comando:

php bin/magento list

per ottenere questo risultato:

bin_magento_list_comandbin_magento_list_comand

Tra le varie opzioni ci sono quelle utili alla pulizia della cache e all’ installazione/aggiornamento dei moduli, e sono esattamente le istruzioni che ci servono per concludere la registrazione del nostro modulo:

php bin/magento cache:clean

php bin/magento setup:upgrade

Se abbiamo fatto le cose correttamente, nell’output dell’ultimo comando lanciato dovrebbe esserci elencato anche il nostro modulo.

bin_magento_upgrade

Bene, effettuiamo un ulteriore controllo: andiamo nel backend del nostro sito e selezioniamo le seguenti voci di menu: Store > Configuration > Advanced > Advanced.

Nella schermata che mostra la lista di tutti i moduli installati troveremo anche la nostra estensione.

backend_installed_modules

COMPLIMENTI!

La nostra estensione è stata registrata correttamente.

Nei prossimi articoli mostreremo gli ulteriori passaggi da compiere per permettere al modulo di eseguire qualche funzionalità.

Ti è piaciuto questo articolo? Votalo!

Torna in alto