سؤال

في Magento2، قمت ببناء وحدة مخصصة بسيطة وأريد تمكينها بواسطة CLI:

bin/magento module:enable Vendorname_Modulename

لكنه يعطيني الخطأ التالي:

وحدة (وحدات) غير معروفة:"اسم_المورد_اسم الوحدة"

الوحدة وملفاتها موجودة في app/code/Vendorname/Modulename/

بالطبع قمت بمسح/تعطيل ذاكرة التخزين المؤقت، ومسح الإنشاء، وعدم تشغيل Memcache(d)...

هل كانت مفيدة؟

المحلول

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 file في الوحدة النمطية الخاصة بك، ولكنك لا تزال تحصل على هذا الخطأ، وهذا يعني أن ملفك registration.php لم يتم تحميله ولا يعرف Magento2 عن الوحدة الخاصة بك.

يجب أن تكون الوحدة الخاصة بك تحت app/code/ (حيث سيقوم Magento2 بالبحث في المجلدات app/code/ وابحث عن الوحدة النمطية الخاصة بك registration.php)، ولكن إذا كنت قد أنشأت وحدتك كحزمة Composer، فستكون في حزمة Composer vendor/ dir وستحتاج إلى خداع Composer لتحميل الوحدات النمطية الخاصة بك registration.php (لا يقوم Magento بالبحث في vendor/ بنفسها).

إذا قمت بفحص أي وحدة Magento2 composer.json في vendor/magento/module-*, ، سترى "autoload" القسم الذي يشير إلى registration.php ملف.لذلك سيقوم Composer بتحميل الوحدة النمطية الخاصة بك تلقائيًا registration.php والتي سوف "يخبر" Magento2 حيث توجد الوحدة الخاصة بك.

هذه قطعة من الخروج الماجنتو الوحدة النمطية composer.json:

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

إذا كانت لديك الوحدة النمطية الخاصة بك في مستودع منفصل وتم تحميلها عبر الملحن، فإن ما ورد أعلاه هو الحل الأمثل.إذا لم يكن لديك في مستودع منفصل، فإن الوحدة الخاصة بك لا تنتمي إليها vendor/ ولكن في app/code/.

نصائح أخرى

<?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) ولأي نوع امتداد (وحدة، قاموس ترجمة).

اضافة الى:لو registration.php ليس في عداد المفقودين

تحقق وتأكد مما إذا كان اسم الوحدة موجودًا في ملف الوحدة النمطية etc/module.xml صحيح (ليس اسم الوحدة في <sequence> العلامة إذا كانت موجودة)

enter image description here

يمكن أن يحدث هذا أيضًا إذا لم يتم تعيين الأذونات بشكل صحيح لدليل الوحدة النمطية وملفاتها.تأكد من إمكانية قراءة الدليل والملفات بواسطة مستخدم الماجنتو والويب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top