Module CLI Magento2 : l'activation donne l'erreur « Module(s) inconnu(s) »
-
13-12-2019 - |
Question
Dans Magento2, j'ai construit un module personnalisé simple et je souhaite l'activer par CLI :
bin/magento module:enable Vendorname_Modulename
Mais cela me donne l'erreur suivante :
Module(s) inconnu(s) :'Nom du fournisseur_Nom du module'
Le module et ses fichiers existent dans app/code/Vendorname/Modulename/
Bien sûr, j'ai vidé/désactivé les caches, effacé la génération, Memcache(d) ne fonctionne pas...
La solution
registration.php
manquant
Apparemment mon Vendorname_Modulename
il manquait au module le registration.php
.J'utilise la dernière version de Magento2 de GitHub.
Chaque module doit s'inscrire dans le ComponentRegistrar
.Un typique registration.php
pour un module (à la racine de votre module) pourrait contenir :
<?php
use Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(
ComponentRegistrar::MODULE,
'Vendorname_Modulename',
__DIR__
);
Voir également n'importe quel composant principal de Magento dans app/code/Magento/
ou votre vendor/magento/
dir
registration.php
NE MANQUE PAS
En plus de cela, si vous avez un registration.php
fichier dans votre module, mais vous obtenez toujours cette erreur, cela signifie que votre registration.php
n'a pas été chargé et Magento2 ne connaît pas votre module.
Votre module devrait être sous app/code/
(où Magento2 recherchera les dossiers dans app/code/
et trouvez votre module registration.php
), mais si vous avez construit votre module en tant que package Composer, il sera dans le package Composer vendor/
dir et vous devrez inciter Composer à charger le fichier de votre module registration.php
(Magento ne recherche pas dans vendor/
par lui-même).
Si vous vouliez vérifier n'importe quel module Magento2 composer.json
dans vendor/magento/module-*
, vous verrez un "autoload"
section qui fait référence à registration.php
déposer.Ainsi, Composer chargera automatiquement les fichiers de votre module registration.php
Qui va "dire" Magento2 où se trouve votre module.
Il s'agit d'un fragment du Paiement Magento modules composer.json
:
"autoload": {
"files": [
"registration.php"
],
"psr-4": {
"Magento\\Checkout\\": ""
}
}
Si vous avez votre module dans un référentiel séparé et chargé via composer, alors ce qui précède est la voie à suivre.Si vous ne l'avez pas dans un référentiel séparé, alors votre module n'appartient pas à vendor/
mais en app/code/
.
Autres conseils
<?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__);
Vous pouvez l'utiliser pour n'importe quelle extension sans rien changer.
Cela fonctionne pour n’importe quel emplacement d’extension (app/code
ou vendor
) et pour tout type d'extension (module, dictionnaire de traduction).
Cela peut également se produire si les autorisations ne sont pas définies correctement pour le répertoire et les fichiers du module.Assurez-vous que le répertoire et les fichiers peuvent être lus par magento et l'utilisateur Web.