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...

Était-ce utile?

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).

Ajout à :Si registration.php NE MANQUE PAS

Vérifiez et confirmez si le nom du module dans le etc/module.xml est correct (pas le nom du module dans <sequence> étiquette si présente)

enter image description here

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top