Модуль CLI Magento2: при включении выдается ошибка «Неизвестный модуль (и)»

23

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

bin/magento module:enable Vendorname_Modulename

Но это дает мне следующую ошибку:

Неизвестный модуль (ы): 'Vendorname_Modulename'

Модуль и его файлы существуют в app/code/Vendorname/Modulename/

Конечно, я очистил / отключил кэши, очистил генерацию, Memcache (d) не работает ...

7ochem
источник

Ответы:

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файл. Таким образом, Composer автоматически загрузит ваши модули, registration.phpкоторые « сообщат » Magento2, где находится ваш модуль.

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

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

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

7ochem
источник
2
Я получил ту же ошибку, когда я ошибочно помещаю файл registration.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) и для любого типа расширения (модуль, словарь перевода).

Mage2.PRO
источник
Вау, это делает присутствие этого файла абсолютно бесполезным, поскольку он может быть одинаковым для каждого модуля. Как насчет дублирующего кода ... @Dimitry, вы победили команду разработчиков Magento2: P
7ochem
Это не будет работать для тем.
Мэдди
5

Добавление к: если registration.phpне отсутствует

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

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

Бинод - GoFundMonica
источник
2
Хорошее дополнение! Также приятно, что вы проиллюстрировали это скриншотом, показывающим точное поле, это примерно +1
7ochem
0

Это также может произойти, если разрешения не установлены правильно для каталога модуля и файлов. Убедитесь, что каталог и файлы могут быть прочитаны magento и веб-пользователем.

SlowFamily
источник
Magento не должен иметь права на запись в коде вашего модуля
7ochem
У меня была эта ошибка сегодня, и восстановление разрешения для папки модуля до 755 сделало эту ошибку исчезающей, спасибо
Herve Tribouilloy