Módulo CLI do Magento2: enable dá erro "Módulo (s) desconhecido (s)"

23

No Magento2, construí um módulo personalizado simples e quero habilitá-lo pelo CLI:

bin/magento module:enable Vendorname_Modulename

Mas está me dando o seguinte erro:

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

O módulo e seus arquivos existem em app/code/Vendorname/Modulename/

Claro que limpei / desabilitei os caches, limpei a geração, o Memcache (d) não está sendo executado ...

7ochem
fonte

Respostas:

27

registration.php ausência de

Aparentemente, meu Vendorname_Modulenamemódulo estava faltando o registration.php. Estou executando a versão mais recente do Magento2 no GitHub.

Todo módulo precisa se registrar no ComponentRegistrar. Um típico registration.phppara um módulo (na raiz do seu módulo) pode conter:

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

Veja também qualquer componente principal do Magento app/code/Magento/ou seu vendor/magento/diretório


registration.php NÃO está faltando

Além disso, se você possui um registration.phparquivo no seu módulo, mas ainda está recebendo esse erro, isso significa que o seu registration.phpnão foi carregado e o Magento2 não conhece o seu módulo.

Seu módulo deve estar em app/code/(onde o Magento2 pesquisará pastas app/code/e encontrará o módulo registration.php), mas se você construiu o módulo como um pacote Composer, ele estará no vendor/diretório do Composer e será necessário induzir o Composer a carregar o módulo registration.php(Magento não pesquisa vendor/por si só).

Se você verificar qualquer módulo Magento2 composer.jsonem vendor/magento/module-*, você verá uma "autoload"seção que faz referência ao registration.phparquivo. Então o Composer carregará automaticamente o seu módulo, o registration.phpque "informará" o Magento2 onde seu módulo está localizado.

Este é um fragmento do módulo Magento Checkoutcomposer.json :

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

Se você possui seu módulo em um repositório separado e carregado via compositor, o procedimento acima é o caminho a seguir. Se você não o tiver em um repositório separado, seu módulo não pertence, vendor/mas sim app/code/.

7ochem
fonte
2
Eu tenho mesmo erro quando eu colocar o arquivo registration.php sob app / code / vendorName / ModuleName / etc pasta por engano
Mukesh
2
Boa apresentação .. bem explicado
devst3r 06/10/16
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__);

Você pode usá-lo para qualquer extensão sem alterar nada.
Ele funciona para qualquer local de extensão ( app/codeou vendor) e para qualquer tipo de extensão (módulo, dicionário de tradução).

Mage2.PRO
fonte
Uau, isso torna a presença desse arquivo absolutamente inútil, pois pode ser a mesma para todos os módulos. Como sobre isso por código duplicado ... @Dimitry, você bateu equipe de desenvolvimento do Magento2: P
7ochem
Isso não funcionará para temas.
30516 Maddy
5

Adicionando a: Se registration.phpNÃO estiver faltando

Verifique e confirme se o nome do módulo no módulo etc/module.xml está correto (não o nome do módulo na <sequence>tag, se houver)

insira a descrição da imagem aqui

Binod - GoFundMonica
fonte
2
Boa adição! Também é bom que você o tenha ilustrado com uma captura de tela mostrando o campo exato em que ele é +1
7ochem 30/01/17
0

Isso também pode ocorrer se as permissões não estiverem definidas corretamente para o diretório e os arquivos do módulo. Verifique se o diretório e os arquivos podem ser lidos pelo magento e pelo usuário da web.

SlowFamily
fonte
Magento não deve precisar escrever permissões no código do seu módulo
7ochem
Hoje eu tive esse erro e, ao restaurar a permissão para a pasta do módulo para 755, esse erro desapareceu, obrigado
Herve Tribouilloy