Модуль CLI Magento2: увімкнення дає помилку “Невідомі модулі


23

У Magento2 я створив простий спеціальний модуль і хочу включити його за допомогою CLI:

bin/magento module:enable Vendorname_Modulename

Але це дає мені таку помилку:

Невідомі модулі: "Ім'я постачальника_Модуль"

Модуль та його файли існують у app/code/Vendorname/Modulename/

Звичайно, я очистив / відключив кеші, очистив генерацію, Memcache (d) не працює ...

Відповіді:


27

registration.php зниклий безвісти

Мабуть, у моєму Vendorname_Modulenameмодулі відсутній registration.php. Я запускаю останню версію Magento2 від GitHub.

Кожен модуль повинен зареєструвати себе у 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.jsonприбуттю vendor/magento/module-*, ви побачите "autoload"розділ , який посилається на registration.phpфайл. Таким чином, композитор автоматично завантажить модуль, registration.phpякий "скаже" Magento2, де знаходиться ваш модуль.

Це фрагмент із модуля Magento Checkoutcomposer.json :

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

Якщо у вас є модуль в окремому сховищі та завантажений через композитор, то вищенаведений шлях. Якщо у вас немає його в окремому сховищі, то ваш модуль не належить до, vendor/а в app/code/.


2
Я отримав таку ж помилку, коли помилково помістив файл register.php під папку app / code / Vendorname / Modulename / etc
Mukesh

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

Це не буде працювати для тем.
Maddy

5

Додавання до: Якщо registration.phpНЕ відсутній

Перевірте і підтвердьте, чи ім'я модуля в модулі etc/module.xml правильне (не ім'я модуля в <sequence>тегу, якщо він присутній)

введіть тут опис зображення


2
Гарне доповнення! Також приємно, що ви проілюстрували його скріншотом із зазначенням точного поля, це приблизно +1
7ochem

0

Це також може статися, якщо дозволи не встановлені правильно для каталогу модулів та файлів. Переконайтесь, що каталог та файли можуть читати користувачі magento та користувач Інтернету.


Magento не повинен вимагати дозволу на запис у коді вашого модуля
7ochem,

У мене сьогодні ця помилка, і відновлення дозволу на папку модулів до 755 зробило цю помилку зникаючою, дякую
Ерве Трибуйлой
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.