Pergunta

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

bin/magento module:enable Vendorname_Modulename

Mas está me dando o seguinte erro:

Módulo(s) desconhecido(s):'Nome do fornecedor_Nome do módulo'

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

É claro que limpei/desativei caches, limpei geração, Memcache(d) não está funcionando...

Foi útil?

Solução

registration.php ausente

Aparentemente meu Vendorname_Modulename faltava o módulo registration.php.Estou executando a versão mais recente do Magento2 do GitHub.

Cada módulo deve se registrar no ComponentRegistrar.Um típico registration.php para 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 em app/code/Magento/ ou seu vendor/magento/ diretório


registration.php NÃO está faltando

Além disso, se você TEM um registration.php arquivo em seu módulo, mas você ainda está recebendo este erro, isso significa que seu registration.php não foi carregado e o Magento2 não conhece o seu módulo.

Seu módulo deve estar sob app/code/ (onde Magento2 irá pesquisar pastas em app/code/ e encontre o seu módulo registration.php), mas se você construiu seu módulo como um pacote do Composer, ele estará no pacote do Composer vendor/ dir e você precisará enganar o Composer para carregar o seu módulo registration.php (Magento não pesquisa em vendor/ por si próprio).

Se você verificar qualquer módulo Magento2 composer.json em vendor/magento/module-*, você verá um "autoload" seção que faz referência ao registration.php arquivo.Então o Composer irá carregar automaticamente o seu módulo registration.php que irá "dizer" Magento2 onde seu módulo está localizado.

Este é um fragmento do Check-out Magento módulo composer.json:

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

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

Outras dicas

<?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.
Funciona para qualquer local de extensão (app/code ou vendor) e para qualquer tipo de extensão (módulo, dicionário de tradução).

Adicionando a:Se registration.php NÃO está 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 em <sequence> etiqueta se presente)

enter image description here

Isso também poderá ocorrer se as permissões não estiverem configuradas corretamente para o diretório e os arquivos do módulo.Certifique-se de que o diretório e os arquivos possam ser lidos pelo magento e pelo usuário da web.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top