Magento2 CLIモジュール:有効にすると「Unkown module(s)」というエラーが表示される


23

Magento2では、シンプルなカスタムモジュールを作成し、CLIで有効にしたいと考えています。

bin/magento module:enable Vendorname_Modulename

しかし、それは私に次のエラーを与えています:

不明なモジュール: 'Vendorname_Modulename'

モジュールとそのファイルは app/code/Vendorname/Modulename/

もちろん、キャッシュをクリア/無効にし、生成をクリアし、Memcache(d)が実行されていません...

回答:


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__
);

app/code/Magento/またはvendor/magento/dir 内のMagentoコアコンポーネントも参照してください


registration.php 行方不明

これに加えてregistration.php、モジュールにファイルがあるのにこのエラーが引き続き発生する場合、これはregistration.phpロードされておらず、Magento2がモジュールを認識していないことを意味します。

モジュールはapp/code/(Magento2がフォルダーapp/code/を検索してモジュールの場所を見つけるregistration.php)の下にあるはずですが、モジュールをComposerパッケージとしてビルドしている場合は、Composerのvendor/dirにあり、Composerにモジュールのregistration.php(Magento vendor/単独で検索しません)。

あなたはどのMagento2モジュールのチェックしたい場合composer.jsonではvendor/magento/module-*、あなたが表示されます"autoload"参照セクションregistration.phpファイルを。そのため、Composerはモジュールを自動ロードし、モジュールが配置されている場所にMagento2 registration.php「通知」します。

これは、Magento Checkoutモジュールの一部composer.jsonです:

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

モジュールが別のリポジトリにあり、composerを介してロードされている場合は、上記の方法を使用します。あなたが別のリポジトリにそれを持っていない場合は、お使いのモジュールが上属していませんvendor/が、中にapp/code/


2
私は誤ってアプリ/コード/ Vendorname / MODULENAME / etcフォルダの下にregistration.phpファイルを配置するとき、私は同じエラーを得た
ムケシュ

2
良いプレゼンテーション..よく説明されている
-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__);

何も変更せずに任意の拡張機能に使用できます。
拡張機能の場所(app/codeまたはvendor)および拡張機能の種類(モジュール、翻訳辞書)に対して機能します。


うわー、これはすべてのモジュールで同じである可能性があるため、このファイルの存在は絶対に役に立たなくなります。重複コードについてはどうでしょう... @ Dimitry、Magento2の開発チームを倒しました:P
7ochem

これはテーマでは機能しません。
マディ

5

追加先:registration.php欠落していない場合

モジュールのモジュール名etc/module.xml が正しいかどうかを確認します(<sequence>存在する場合、タグのモジュール名ではありません)

ここに画像の説明を入力してください


2
良い追加!また、正確なフィールドを示すスクリーンショットで説明したことも嬉しいです。それは約+1
7ochem

0

これは、モジュールのディレクトリとファイルのアクセス許可が正しく設定されていない場合にも発生する可能性があります。ディレクトリおよびファイルをmagentoおよびWebユーザーが読み取れるようにします。


Magentoは、モジュールのコードに対する書き込み権限を必要としないはずです
-7ochem

私は今日、このエラーが発生したと755にモジュールフォルダのアクセス権を復元するdissapearingこのエラーをした、ありがとう
エルベTribouilloy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.