Magento2 CLI模块:启用会给出错误“未知模块”


23

在Magento2中,我构建了一个简单的自定义模块,并希望通过CLI启用它:

bin/magento module:enable Vendorname_Modulename

但这给了我以下错误:

未知模块:“供应商名称_模块名称”

该模块及其文件确实存在于 app/code/Vendorname/Modulename/

当然,我已经清除/禁用了缓存,清除了生成,Memcache(d)没有运行...

Answers:


27

registration.php 失踪

显然我的Vendorname_Modulename模块缺少registration.php。我正在从GitHub运行最新的Magento2版本。

每个模块都必须在中注册自己ComponentRegistrar。一个典型registration.php的模块(在模块的根目录中)可能包含:

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

另请参阅中的任何Magento核心组件app/code/Magento/或您的vendor/magento/目录


registration.php 不丢失

除此之外,如果您registration.php的模块中registration.php确实有文件,但是仍然出现此错误,则表明您的模块尚未加载,Magento2不了解您的模块。

您的模块应该位于app/code/(Magento2将在其中搜索文件夹app/code/并找到模块的registration.php),但是如果您已将模块构建为Composer软件包,则它将位于Composer的vendor/目录中,并且需要诱使Composer加载模块的registration.php(Magento本身不会搜索vendor/)。

如果您想检查任何Magento2模块composer.jsonvendor/magento/module-*,你会看到一个"autoload"部分,其引用的registration.php文件。因此Composer将自动加载您的模块registration.php,这将“告诉”您模块所在的Magento2。

这是Magento Checkout模块的片段composer.json

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

如果您将模块放在单独的存储库中并通过composer加载,则可以采用上述方法。如果您没有将其放在单独的存储库中,那么您的模块不属于,vendor/而是属于app/code/


2
当我错误地将registration.php文件放到app / code / Vendorname / Modulename / etc文件夹下时,我遇到了同样的错误
Mukesh

2
好的演讲..很好的解释
devst3r '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__);

您可以将其用于任何扩展,而无需进行任何更改。
它适用于任何扩展名位置(app/codevendor)和任何扩展名类型(模块,翻译词典)。


哇,这使该文件的存在绝对无用,因为每个模块都可能相同。重复代码怎么样... @Dimitry,您击败了Magento2的开发团队:P
7ochem

这不适用于主题。
马蒂

5

添加到:如果registration.php不丢失

检查并确认模块中的模块名称etc/module.xml 是否正确(<sequence>如果存在,则不是标签中的模块名称)

在此处输入图片说明


2
好加成!还不错,您已经用屏幕快照进行了说明,该屏幕快照显示了大约+1的确切字段
7ochem'1

0

如果没有正确设置模块目录和文件的权限,也会发生这种情况。确保magento和Web用户可以读取目录和文件。


Magento不需要模块代码的写许可权
7ochem

我今天遇到了此错误,并且将模块文件夹的权限恢复为755使得此错误消失了,谢谢
Herve Tribouilloy 18-10-17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.