4

我已经阅读了 Magento 的 DevDocs 并用谷歌搜索了这个问题,但通常缺少的registration.php答案在这里并不适用。
我在发布的 CE 2.0.0 版本上,我只是想启用我的第一个最小测试模块,magento/vendor/但是

bin/magento module:enable -c Tchsl_Test

结果是:

未知模块:“Tchsl_Test”

我基于模块的命名约定和文件位置vendor/magento/

vendor/tchsl/module-test/etc/module.xml我有

<config xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Tchsl_Test" />
</config>

vendor/tchsl/module-test/registration.php我有

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

我错过了什么?

4

2 回答 2

3

我遇到了同样的问题,经过一番修修补补,发现我们的模块实际上属于app/code/Tchsl/Test/. 将你的模块文件移到那里,运行 shell 命令module:status应该会显示你禁用的模块。

于 2016-01-15T18:52:26.050 回答
0

你不需要把你的模块放在app/code/. 在app/code/Magento2 中将搜索并找到您模块的registration.php. 在 Composer 的vendor/目录中它不会这样做,所以我们需要欺骗 Composer 加载你的模块的registration.php.

如果您在 中检查任何 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/.


另请参阅此 Magento Stack Exchange 帖子

于 2016-04-07T07:32:43.723 回答