MODULO MAGENTO 2 CLI: Abilita dà errore "Modulo (i) sconosciuto"
-
13-12-2019 - |
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 ...
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).
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.