Magento 2 - يحاول مدير الكائنات إنشاء مثيل لفئة Abstract.(خطأ فادح)

magento.stackexchange https://magento.stackexchange.com//questions/76584

سؤال

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

الخطأ

Fatal error: Cannot instantiate abstract class Magento\Framework\Model\Resource\AbstractResource in /lib/internal/Magento/Framework/ObjectManager/Factory/Dynamic/Developer.php on line 75

المشكلة

تحتوي الوحدة الخاصة بي على نموذج يمتد \Magento\Quote\Model\Quote.يحتوي منشئ هذا النموذج على السطر التالي الذي يقوم بحقن هذا:

\Magento\Framework\Model\Resource\AbstractResource $resource = null,.

تعمل وحدة التحكم التي تقوم بإنشاء نموذج على توسيع نطاق \Magento\Backend\App\Action والاستخدامات $this->_objectManager->create() لمحاكاة النموذج.

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

كان أول ما فكرت به هو أن Magento يستخدم ملف di.xml لاستبدال هذا، تنفيذ هذا أو شيء من هذا، لم يكن هذا هو الحال.

شكرا لأخذ الوقت لقراءة هذا.هو موضع تقدير أي مساعدة أو مدخلات بشأن هذه المسألة.

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

المحلول

يمكن أن يحدث هذا إذا أضافت فئتك الفرعية تبعيات جديدة بعد التبعيات الاختيارية الموجودة للفئة الأصلية.

مقتطف من ولي الأمر

    \Magento\Quote\Model\Cart\CurrencyFactory $currencyFactory,  // required
    JoinProcessorInterface $extensionAttributesJoinProcessor,    // required
    \Magento\Framework\Model\Resource\AbstractResource $resource = null,       //optional
    \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,  //optional
    array $data = [] //optional
)}

كيف يمكن للكود أن يغير ما هو اختياري

    \Magento\Quote\Model\Cart\CurrencyFactory $currencyFactory,  // required
    JoinProcessorInterface $extensionAttributesJoinProcessor,    // required
    \Magento\Framework\Model\Resource\AbstractResource $resource = null,       // required (even though it has a default value, because it is followed by parameters that don't have default values)
    int $x, // required
    \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,  // optional (still optional because there are no required parameters following it)
    array $data = [] // optional
)}

سيحاول Magento 2 Object Manager إدخال أي معلمات مطلوبة.لذلك يمكن أن يحدث هذا إذا قمت بإضافة معلمة مطلوبة في نهاية المنشئ.

يمكنك إصلاح ذلك عن طريق نقل أي معلمة جديدة مطلوبة إلى الأعلى فوق المعلمات الاختيارية.

نصائح أخرى

في بعض الأحيان تم تحديث بعض الوحدات ولم يتم تحديث المراجع الموجودة ضمن /تم إنشاؤها بعد.

فقط قم ب bin/magento setup:di:compile وحاول مرة أخرى.

(نجح الأمر بالنسبة لي عند تحديث وحدة الدفع ولم يتم تحميل/الخروج)

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