Module CLI Magento2: activer donne l'erreur «Module (s) inconnu (s)»

23

Dans Magento2, j'ai construit un module personnalisé simple et je veux l'activer par CLI:

bin/magento module:enable Vendorname_Modulename

Mais cela me donne l'erreur suivante:

Module (s) inconnu (s): 'Vendorname_Modulename'

Le module et ses fichiers existent dans app/code/Vendorname/Modulename/

Bien sûr, j'ai effacé / désactivé les caches, effacé la génération, Memcache (d) ne fonctionne pas ...

7ochem
la source

Réponses:

27

registration.php manquant

Apparemment, mon Vendorname_Modulenamemodule manquait registration.php. J'utilise la dernière version de Magento2 depuis GitHub.

Chaque module doit s'enregistrer dans le ComponentRegistrar. Un typique registration.phppour un module (à la racine de votre module) peut contenir:

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

Voir également tout composant de base Magento dans app/code/Magento/ou votre vendor/magento/dir


registration.php À ne pas manquer

En plus de cela, si vous avez un registration.phpfichier dans votre module, mais que vous obtenez toujours cette erreur, cela signifie que votre registration.phpn'a pas été chargé et Magento2 ne connaît pas votre module.

Votre module doit être sous app/code/(où Magento2 recherchera les dossiers app/code/et trouvera vos modules registration.php), mais si vous avez construit votre module en tant que package Composer, il sera dans le répertoire Composer vendor/et vous devrez inciter Composer à charger votre module registration.php(Magento ne recherche pas vendor/par lui-même).

Si vous souhaitez vérifier tout du module Magento2 composer.jsonde dans vendor/magento/module-*, vous verrez une "autoload"section qui fait référence au registration.phpfichier. Ainsi, Composer chargera automatiquement vos modules registration.phpqui "diront" à Magento2 où se trouve votre module.

Ceci est un fragment du module Magento Checkoutcomposer.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 le chemin à parcourir. Si vous ne l'avez pas dans un référentiel séparé, votre module n'appartient pas à vendor/mais à app/code/.

7ochem
la source
2
J'ai obtenu la même erreur lorsque je place le fichier registration.php dans le dossier app / code / Vendorname / Modulename / etc par erreur
Mukesh
2
Bonne présentation .. bien expliqué
devst3r
6
<?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.
Il fonctionne pour tout emplacement d'extension ( app/codeou vendor) et pour tout type d'extension (module, dictionnaire de traduction).

Mage2.PRO
la source
Wow, cela rend la présence de ce fichier absolument inutile car elle pourrait être la même pour chaque module. Que diriez-vous de cela pour le code en double ... @Dimitry, vous avez battu l'équipe de développement de Magento2: P
7ochem
Cela ne fonctionnera pas pour les thèmes.
Maddy
5

Ajout à: Si registration.phpPAS manquant

Vérifiez et confirmez si le nom du module dans le module etc/module.xml est correct (pas le nom du module dans la <sequence>balise s'il est présent)

entrez la description de l'image ici

Binod - GoFundMonica
la source
2
Bon ajout! Aussi bien que vous l'ayez illustré avec une capture d'écran montrant le champ exact, c'est environ +1
7ochem
0

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.

SlowFamily
la source
Magento ne devrait pas avoir besoin d'autorisations d'écriture sur le code de votre module
7ochem
J'ai eu cette erreur aujourd'hui et restaurer la permission pour le dossier du module à 755 a fait disparaître cette erreur, merci
Hervé Tribouilloy