โมดูล Magento2 CLI: เปิดใช้งานให้ข้อผิดพลาด“ โมดูลที่ไม่รู้จัก”


23

ใน Magento2 ฉันได้สร้างโมดูลที่เรียบง่ายและต้องการเปิดใช้งานโดย CLI:

bin/magento module:enable Vendorname_Modulename

แต่มันทำให้ฉันมีข้อผิดพลาดต่อไปนี้:

โมดูลที่ไม่รู้จัก: '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__
);

ยังเห็นองค์ประกอบหลัก ๆ ในวีโอไอพีapp/code/Magento/ของคุณหรือvendor/magento/dir


registration.php ไม่พลาด

นอกจากนี้หากคุณมีregistration.phpไฟล์ในโมดูลของคุณ แต่คุณยังคงได้รับข้อผิดพลาดนี้หมายความregistration.phpว่าไม่ได้โหลดของคุณและ Magento2 ไม่ทราบเกี่ยวกับโมดูลของคุณ

โมดูลของคุณควรอยู่ภายใต้app/code/(ที่ Magento2 จะค้นหาโฟลเดอร์ในapp/code/และค้นหาโมดูลของคุณregistration.php) แต่ถ้าคุณสร้างโมดูลของคุณเป็นแพ็คเกจนักแต่งเพลงมันจะอยู่ในvendor/dir ของนักแต่งเพลงและคุณจะต้องหลอกนักแต่งเพลงให้โหลดโมดูลของคุณ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
ฉันได้รับข้อผิดพลาดเดียวกันเมื่อฉันวางไฟล์ 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) และสำหรับประเภทส่วนขยายใด ๆ (โมดูลพจนานุกรมการแปล)


ว้าวสิ่งนี้ทำให้การแสดงตนของไฟล์นี้ไร้ประโยชน์อย่างแน่นอนเพราะมันอาจเหมือนกันสำหรับทุกโมดูล สำหรับรหัสที่ซ้ำกัน ... @Dimitry คุณได้พ่ายแพ้ทีมนักพัฒนาของ Magento2: P
7ochem

สิ่งนี้จะใช้ไม่ได้กับธีม
Maddy

5

กำลังเพิ่มลงใน: หากregistration.phpไม่หายไป

ตรวจสอบและยืนยันว่าชื่อโมดูลในโมดูลetc/module.xml นั้นถูกต้อง (ไม่ใช่ชื่อโมดูลใน<sequence>แท็กถ้ามี)

ป้อนคำอธิบายรูปภาพที่นี่


2
นอกจากนี้ดี! นอกจากนี้ยังเป็นเรื่องดีที่คุณได้แสดงภาพหน้าจอที่แสดงฟิลด์ที่แน่นอนมันเป็นเรื่องเกี่ยวกับ +1
7ochem

0

สิ่งนี้สามารถเกิดขึ้นได้หากการตั้งค่าการอนุญาตไม่ถูกต้องสำหรับไดเรกทอรีโมดูลและไฟล์ ตรวจสอบให้แน่ใจว่าไดเร็กทอรีและไฟล์สามารถอ่านได้โดย magento และผู้ใช้เว็บ


วีโอไอพีไม่จำเป็นต้องมีสิทธิ์ในการเขียนบนรหัสของโมดูลของคุณ
7ochem

ฉันมีข้อผิดพลาดในวันนี้และกู้คืนสิทธิ์สำหรับโฟลเดอร์โมดูลไปที่ 755 ทำให้ข้อผิดพลาดนี้หายไปขอบคุณ
Herve Tribouilloy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.