Domanda

In Magento2 Ho costruito un semplice modulo personalizzato e vuoi abilitarlo da cli:

bin/magento module:enable Vendorname_Modulename
.

Ma mi sta dando il seguente errore:

.

Modulo (i) sconosciuto (i): 'VendoRName_ModuleName'

Il modulo e i file sono esistono in app/code/Vendorname/Modulename/

certo che ho cancellato / disabilitato cache, generazione di eliminazione, memcache (D) non in esecuzione ...

È stato utile?

Soluzione

registration.php mancante

Apparentemente il mio modulo Vendorname_Modulename mancava il registration.php. Sto eseguendo l'ultima versione Magento2 da GitHub.

Ogni modulo deve registrarsi nel ComponentRegistrar. Un tipico registration.php per un modulo (nella radice del modulo) potrebbe contenere:

<?php
use Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(
    ComponentRegistrar::MODULE,
    'Vendorname_Modulename',
    __DIR__
);
.

Vedi anche qualsiasi componente magento core in app/code/Magento/ o il tuo vendor/magento/ Dir


.

registration.php non mancante

Oltre a questo, se si dispone di un file registration.php nel modulo, ma si sta ancora ricevendo questo errore, ciò significa che il tuo registration.php non è stato caricato e Magento2 non conosce il modulo.

Il modulo deve essere sotto app/code/ (dove Magento2 cercherà le cartelle in app/code/ e trova il registration.php del tuo modulo), ma se hai creato il modulo come pacchetto composito, sarà in vendor/ Dir del compositore e dovrai ingannare Compositore nel caricamento del registration.php del modulo del modulo (Magento non cerca in vendor/ da solo).

Se controlli qualsiasi composer.json del modulo Magento2 in vendor/magento/module-*TagCode, vedrai una sezione "autoload" che fa riferimento al file registration.php. Quindi il compositore aumenterà automaticamente il registration.php del modulo che "Tell" Magento2 in cui si trova il tuo modulo.

Questo è un frammento da Magento Checkout composer.json del modulo:

"autoload": {
    "files": [
        "registration.php"
    ],
    "psr-4": {
        "Magento\\Checkout\\": ""
    }
}
.

Se si ha il modulo in un repository separato e caricato tramite compositore, allora quanto sopra è il modo di andare. Se non ce l'hai in un repository separato, il modulo non appartiene a vendor/ ma in app/code/.

Altri suggerimenti

<?php
use Magento\Framework\Component\ComponentRegistrar;
$name = implode('_', array_map(
    function($part) {
        return implode(array_map('ucfirst', explode('-', $part)));
    },
    array_slice(explode(DIRECTORY_SEPARATOR, __DIR__), -2, 2)
));
ComponentRegistrar::register(ComponentRegistrar::MODULE, $name, __DIR__);
.

Puoi usarlo per qualsiasi estensione senza cambiare nulla.
Funziona per qualsiasi posizione di estensione (app/code o vendor) e per qualsiasi tipo di interno (modulo, modulo di traduzione).

Aggiunta di: se registration.php non mancante

Verifica e conferma se il nome del modulo nel modulo etc/module.xml del modulo è corretto (non il nome del modulo nel tag <sequence> se presente)

 Inserire l'immagine Descrizione qui

Questo può verificarsi anche se le autorizzazioni non sono impostate correttamente per la directory e i file del modulo.Assicurarsi che la directory e i file possano essere letti da magento e utente web.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top