Moduł Magento2 CLI: włączenie daje błąd „Nieznane moduły”


23

W Magento2 zbudowałem prosty moduł niestandardowy i chcę go włączyć za pomocą CLI:

bin/magento module:enable Vendorname_Modulename

Ale daje mi następujący błąd:

Nieznane moduły: „nazwa_modulu_dostawcy”

Moduł i jego pliki istnieją w app/code/Vendorname/Modulename/

Oczywiście wyczyściłem / wyłączyłem pamięć podręczną, wyczyściłem generowanie, Memcache (d) nie działa ...

Odpowiedzi:


27

registration.php brakujący

Najwyraźniej w moim Vendorname_Modulenamemodule brakowało registration.php. Korzystam z najnowszej wersji Magento2 od GitHub.

Każdy moduł musi się zarejestrować w ComponentRegistrar. Typowy registration.phpdla modułu (w katalogu głównym modułu) może zawierać:

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

Zobacz także jakikolwiek główny komponent Magento w app/code/Magento/swoim vendor/magento/katalogu


registration.php NIE brakuje

Ponadto, jeśli masz registration.phpplik w module, ale nadal registration.phppojawia się ten błąd, oznacza to, że nie został załadowany, a Magento2 nie wie o twoim module.

Twój moduł powinien znajdować się pod app/code/(gdzie Magento2 przeszuka foldery app/code/i znajdzie moduł registration.php), ale jeśli zbudowałeś moduł jako pakiet Composer, będzie on w katalogu kompozytora vendor/i będziesz musiał oszukać Composer, aby załadował moduł registration.php(Magento nie wyszukuje vendor/samodzielnie).

Jeśli chcesz sprawdzić dowolny moduł Magento2 za composer.jsonin vendor/magento/module-*, zobaczysz "autoload"sekcję, która odwołuje się do registration.phppliku. Więc Composer automatycznie załaduje moduł, registration.phpktóry „powie” załaduje Magento2, gdzie znajduje się moduł.

To jest fragment modułu Magento Checkoutcomposer.json :

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

Jeśli masz swój moduł w osobnym repozytorium i ładujesz go przez kompozytora, to powyższe rozwiązanie jest odpowiednie. Jeśli nie masz go w oddzielnym repozytorium, oznacza to, że twój moduł nie należy do, vendor/ale do app/code/.


2
Otrzymałem ten sam błąd, gdy przez pomyłkę umieszczam plik register.php w folderze app / code / Vendorname / Modulename / etc
Mukesh

2
Dobra prezentacja .. dobrze wyjaśniona
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__);

Możesz go używać do dowolnego rozszerzenia bez zmiany czegokolwiek.
Działa dla dowolnej lokalizacji rozszerzenia ( app/codelub vendor) i dowolnego typu rozszerzenia (moduł, słownik tłumaczeń).


Wow, to sprawia, że ​​obecność tego pliku jest absolutnie bezużyteczna, ponieważ może być taki sam dla każdego modułu. Co powiesz na duplikat kodu ... @Dimitry, pobiłeś zespół programistów
Magento2

To nie zadziała w przypadku motywów.
Maddy,

5

Dodanie do: jeśli registration.phpnie brakuje

Sprawdź i potwierdź, czy nazwa modułu w module etc/module.xml jest poprawna (nie nazwa modułu w<sequence> znaczniku, jeśli jest obecna)

wprowadź opis zdjęcia tutaj


2
Dobry dodatek! Miło też, że zilustrowałeś to zrzutem ekranu z dokładnym polem około +1
7ochem

0

Może się to również zdarzyć, jeśli uprawnienia nie zostaną poprawnie ustawione dla katalogu i plików modułu. Upewnij się, że katalog i pliki mogą być odczytane przez magento i użytkownika sieci.


Magento nie powinien potrzebować uprawnień do zapisu w kodzie modułu
7ochem

Miałem ten błąd dzisiaj i przywrócenie uprawnień do folderu modułu do 755 sprawiło, że ten błąd zniknął, dzięki
Herve Tribouilloy
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.