Mô-đun Magento2 CLI: cho phép lỗi (các) mô-đun Unkown


23

Trong Magento2 tôi đã xây dựng một mô-đun tùy chỉnh đơn giản và muốn kích hoạt nó bằng CLI:

bin/magento module:enable Vendorname_Modulename

Nhưng nó cho tôi lỗi sau:

(Các) mô-đun không xác định: 'Vendorname_Modulename'

Các mô-đun và tập tin của nó tồn tại trong app/code/Vendorname/Modulename/

Tất nhiên, tôi đã xóa / vô hiệu hóa bộ nhớ cache, tạo thế hệ đã xóa, Memcache (d) không chạy ...

Câu trả lời:


27

registration.php còn thiếu

Rõ ràng Vendorname_Modulenamemô-đun của tôi đã thiếu registration.php. Tôi đang chạy phiên bản Magento2 mới nhất từ ​​GitHub.

Mỗi mô-đun phải đăng ký chính nó trong ComponentRegistrar. Một điển hình registration.phpcho một mô-đun (trong thư mục gốc của mô-đun của bạn) có thể chứa:

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

Cũng xem bất kỳ thành phần cốt lõi Magento trong app/code/Magento/hoặc vendor/magento/thư mục của bạn


registration.php KHÔNG thiếu

Ngoài ra, nếu bạn có một registration.phptệp trong mô-đun của mình, nhưng bạn vẫn gặp lỗi này, điều này có nghĩa là bạn registration.phpđã không được tải và Magento2 không biết về mô-đun của bạn.

Mô-đun của bạn phải ở dưới app/code/(nơi Magento2 sẽ tìm kiếm các thư mục trong app/code/và tìm mô-đun của bạn registration.php), nhưng nếu bạn đã xây dựng mô-đun của mình dưới dạng gói Trình soạn thảo, thì nó sẽ nằm trong vendor/thư mục của Nhà soạn nhạc và bạn sẽ cần lừa Nhà soạn nhạc để tải mô-đun của bạn registration.php(Magento không tự tìm kiếm vendor/).

Nếu bạn muốn kiểm tra bất kỳ mô-đun của Magento2 composer.jsontrong vendor/magento/module-*, bạn sẽ thấy một "autoload"phần mà tài liệu tham khảo các registration.phptập tin. Vì vậy, Trình soạn thảo sẽ tự động tải mô-đun của bạn, phần registration.phpnày sẽ "thông báo" cho Magento2 vị trí mô-đun của bạn.

Đây là một đoạn từ mô-đun Magento Checkoutcomposer.json :

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

Nếu bạn có mô-đun của mình trong một kho lưu trữ riêng biệt và được tải thông qua trình soạn thảo, thì đây là cách để đi. Nếu bạn không có nó trong một kho lưu trữ riêng biệt, thì mô-đun của bạn không thuộc về vendor/mà nằm trong app/code/.


2
Tôi đã gặp lỗi tương tự khi tôi đặt tệp register.php trong thư mục app / code / Vendorname / Modulename / etc
Mukesh

2
Trình bày tốt .. giải thích tốt
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__);

Bạn có thể sử dụng nó cho bất kỳ phần mở rộng mà không thay đổi bất cứ điều gì.
Nó hoạt động cho bất kỳ vị trí mở rộng ( app/codehoặc vendor) và cho bất kỳ loại tiện ích mở rộng nào (mô-đun, từ điển dịch).


Wow, điều này làm cho sự hiện diện của tệp này hoàn toàn vô dụng vì nó có thể giống nhau cho mọi mô-đun. Còn về mã trùng lặp ... @Dimitry, bạn đã đánh bại nhóm phát triển của Magento2: P
7ochem

Điều này sẽ không làm việc cho các chủ đề.
Maddy

5

Thêm vào: Nếu registration.phpKHÔNG bị thiếu

Kiểm tra và xác nhận xem tên mô-đun trong mô-đun etc/module.xml có đúng không (không phải tên mô-đun trong <sequence>thẻ nếu có)

nhập mô tả hình ảnh ở đây


2
Tốt bổ sung! Cũng thật tuyệt khi bạn đã minh họa nó bằng một ảnh chụp màn hình hiển thị chính xác trường đó là khoảng +1
7ochem

0

Điều này cũng có thể xảy ra nếu quyền không được đặt chính xác cho thư mục mô-đun và tệp. Đảm bảo thư mục và tệp có thể được đọc bởi magento và người dùng web.


Magento không cần quyền ghi vào mã của mô-đun của bạn
7ochem

Tôi đã gặp lỗi này ngày hôm nay và khôi phục quyền cho thư mục mô-đun thành 755 khiến lỗi này biến mất, cảm ơn
Herve Tribouilloy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.