Modul Magento2 CLI: aktifkan memberikan kesalahan “Modul tidak dikenal”

23

Di Magento2 saya telah membangun modul kustom sederhana dan ingin mengaktifkannya oleh CLI:

bin/magento module:enable Vendorname_Modulename

Tapi itu memberi saya kesalahan berikut:

Modul tidak dikenal: 'Vendorname_Modulename'

Modul dan file-file itu memang ada di app/code/Vendorname/Modulename/

Tentu saja saya sudah membersihkan / menonaktifkan cache, menghapus generasi, Memcache (d) tidak berjalan ...

7ochem
sumber

Jawaban:

27

registration.php hilang

Rupanya Vendorname_Modulenamemodul saya tidak ada registration.php. Saya menjalankan versi Magento2 terbaru dari GitHub.

Setiap modul harus mendaftar sendiri di ComponentRegistrar. Tipikal registration.phpuntuk sebuah modul (di root modul Anda) dapat berisi:

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

Lihat juga komponen inti Magento di app/code/Magento/atau vendor/magento/dir Anda


registration.php TIDAK hilang

Selain itu, jika Anda memiliki registration.phpfile di modul Anda, tetapi Anda masih mendapatkan kesalahan ini, ini berarti bahwa Anda registration.phptidak dimuat dan Magento2 tidak tahu tentang modul Anda.

Modul Anda harus berada di bawah app/code/(di mana Magento2 akan mencari folder app/code/dan menemukan modul Anda registration.php), tetapi jika Anda telah membangun modul Anda sebagai paket Komposer, itu akan berada di vendor/dir Komposer dan Anda perlu menipu Komposer untuk memuat modul Anda registration.php(Magento tidak mencari vendor/sendiri).

Jika Anda akan memeriksa modul Magento2 apa pun composer.jsondi vendor/magento/module-*, Anda akan melihat "autoload"bagian yang mereferensikan registration.phpfile. Jadi Composer akan memuat secara otomatis modul Anda registration.phpyang akan "memberi tahu" Magento2 di mana modul Anda berada.

Ini adalah bagian dari modul Magento Checkoutcomposer.json :

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

Jika Anda memiliki modul dalam repositori terpisah dan dimuat melalui komposer, maka cara di atas adalah cara yang harus dilakukan. Jika Anda tidak memilikinya di repositori terpisah, maka modul Anda tidak termasuk vendor/tetapi dalam app/code/.

7ochem
sumber
2
Saya mendapat kesalahan yang sama ketika saya menempatkan file registrasi.php di bawah folder app / code / Vendorname / Modulename / etc secara tidak sengaja
Mukesh
2
Presentasi yang bagus .. dijelaskan dengan baik
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__);

Anda dapat menggunakannya untuk ekstensi apa pun tanpa mengubah apa pun.
Ini berfungsi untuk semua lokasi ekstensi ( app/codeatau vendor) dan untuk semua jenis ekstensi (modul, kamus terjemahan).

Mage2.PRO
sumber
Wow, ini membuat keberadaan file ini sama sekali tidak berguna karena bisa sama untuk setiap modul. Bagaimana dengan kode duplikat ... @ Dimitry, Anda telah mengalahkan tim pengembang Magento2: P
7ochem
Ini tidak akan berfungsi untuk tema.
Maddy
5

Menambah: Jika registration.phpTIDAK hilang

Periksa dan konfirmasikan apakah nama modul dalam modul etc/module.xml sudah benar (bukan nama modul dalam <sequence>tag jika ada)

masukkan deskripsi gambar di sini

Binod - GoFundMonica
sumber
2
Tambahan yang bagus! Juga bagus bahwa Anda telah mengilustrasikannya dengan tangkapan layar yang menunjukkan bidang yang tepat itu adalah tentang +1
7ochem
0

Ini juga dapat terjadi jika izin tidak diatur dengan benar untuk direktori modul dan file. Pastikan direktori dan file dapat dibaca oleh magento dan pengguna web.

SlowFamily
sumber
Magento seharusnya tidak perlu izin menulis pada kode modul Anda
7ochem
Saya mengalami kesalahan ini hari ini dan mengembalikan izin untuk folder modul ke 755 membuat kesalahan ini menghilang, terima kasih
Herve Tribouilloy