Módulo CLI de Magento2: habilitar da error "Módulo (s) desconocido (s)"

23

En Magento2 he creado un módulo personalizado simple y quiero habilitarlo mediante CLI:

bin/magento module:enable Vendorname_Modulename

Pero me está dando el siguiente error:

Módulo (s) desconocido (s): 'Vendorname_Modulename'

El módulo y sus archivos existen en app/code/Vendorname/Modulename/

Por supuesto, he borrado / deshabilitado cachés, borrado generación, Memcache (d) no se ejecuta ...

7ochem
fuente

Respuestas:

27

registration.php desaparecido

Aparentemente a mi Vendorname_Modulenamemódulo le faltaba el registration.php. Estoy ejecutando la última versión de Magento2 de GitHub.

Cada módulo tiene que registrarse en el ComponentRegistrar. Un típico registration.phppara un módulo (en la raíz de su módulo) podría contener:

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

También vea cualquier componente principal de Magento en app/code/Magento/su vendor/magento/directorio


registration.php NO falta

Además de esto, si TIENE un registration.phparchivo en su módulo, pero aún recibe este error, esto significa que registration.phpno se cargó y Magento2 no sabe acerca de su módulo.

Su módulo debe estar debajo app/code/(donde Magento2 buscará carpetas app/code/y encontrará el de su módulo registration.php), pero si ha creado su módulo como un paquete Composer, estará en el vendor/directorio de Composer y deberá engañar a Composer para que cargue su módulo registration.php(Magento no busca vendor/por sí mismo).

Si desea comprobar de cualquier módulo Magento2 composer.jsonen vendor/magento/module-*, verá una "autoload"sección que hace referencia al registration.phparchivo. Entonces Composer cargará automáticamente su módulo, registration.phplo que "le dirá" a Magento2 dónde está ubicado su módulo.

Este es un fragmento del módulo Magento Checkoutcomposer.json :

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

Si tiene su módulo en un repositorio separado y cargado a través del compositor, entonces lo anterior es el camino a seguir. Si no lo tiene en un repositorio separado, entonces su módulo no pertenece vendor/sino dentro app/code/.

7ochem
fuente
2
Obtuve el mismo error cuando coloco el archivo Registration.php en la carpeta app / code / Vendorname / Modulename / etc por error
Mukesh
2
Buena presentación ... bien explicada
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__);

Puede usarlo para cualquier extensión sin cambiar nada.
Funciona para cualquier ubicación de extensión ( app/codeo vendor) y para cualquier tipo de extensión (módulo, diccionario de traducción).

Mage2.PRO
fuente
Wow, esto hace que la presencia de este archivo sea absolutamente inútil, ya que podría ser lo mismo para cada módulo. ¿Qué tal eso para el código duplicado ... @Dimitry, has derrotado al equipo de desarrollo de Magento2: P
7ochem
Esto no funcionará para los temas.
Maddy
5

Agregando a: Si registration.phpNO falta

Verifique y confirme si el nombre del módulo en el módulo etc/module.xml es correcto (no el nombre del módulo en la <sequence>etiqueta si está presente)

ingrese la descripción de la imagen aquí

Binod - GoFundMonica
fuente
2
Buena adición! También es bueno que lo haya ilustrado con una captura de pantalla que muestra el campo exacto sobre el que se trata +1
7ochem el
0

Esto también puede ocurrir si los permisos no están configurados correctamente para el directorio y los archivos del módulo. Asegúrese de que magento y el usuario web puedan leer el directorio y los archivos.

SlowFamily
fuente
Magento no debería necesitar permisos de escritura en el código de su módulo
7ochem
Tuve este error hoy y restaurar el permiso para la carpeta del módulo a 755 hizo que este error desapareciera, gracias
Herve Tribouilloy