क्या Magento 2 CRUD मॉडल में निर्भरता को इंजेक्ट करना संभव है?
वह है - Magento 2 में एक आधार सार मॉडल वर्ग है Magento\Framework\Model\AbstractModel
:। यदि आप एक सिंपल क्रिएट, रीड, अपडेट, डिलीट मॉडल ऑब्जेक्ट बनाना चाहते हैं, तो आप इस क्लास को अपनी क्लास के साथ बढ़ाएँ।
class Foo extends Magento\Framework\Model\AbstractModel
{
}
क्या आपके मॉडल की __construct
विधि में निर्भरता को इंजेक्ट करना संभव है ? जब मैं कोशिश करता हूं, तो मैं निम्नलिखित त्रुटि प्राप्त करता हूं।
घातक त्रुटि: अमूर्त वर्ग मैगनेटो \ फ्रेमवर्क \ मॉडल \ रिसोर्समॉडल \ एब्सट्रैक्ट को तत्काल नहीं कर सकता
अपराधी प्रतीत हो रहा है AbstractModel
की __construct
विधि।
public function __construct(
\Magento\Framework\Model\Context $context,
\Magento\Framework\Registry $registry,
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
array $data = []
) {
इस कंस्ट्रक्टर ( Magento\Framework\Model\ResourceModel\AbstractResource
, Magento\Framework\Data\Collection\AbstractDb
) में दो प्रकार के संकेत हैं जो मैगेंटो ऑब्जेक्ट मैनेजर इंटरफेस नहीं हैं। वे अमूर्त वर्ग हैं। जब मैं इस वर्ग का विस्तार करता हूं और अपने इंजेक्शन की निर्भरता को जोड़ने का प्रयास करता हूं
class Foo extends Magento\Framework\Model\AbstractModel
{
public function __construct(
\Magento\Framework\Model\Context $context,
\Magento\Framework\Registry $registry,
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
array $data = [],
\Package\Module\Model\Mine $mine,
) {
//...
parent::__construct($context, $registry, $resource, $resourceCollection, $data);
}
}
Magento की घंटी तब बजती है जब ऑब्जेक्ट मैनेजर अमूर्त कक्षाओं को तुरंत करने की कोशिश करता है।
मैं अपनी वस्तु निर्भरता को अमूर्त वर्गों के सामने ले जाकर इसे "ठीक" कर सकता हूं
public function __construct(
\Magento\Framework\Model\Context $context,
\Magento\Framework\Registry $registry,
\Package\Module\Model\Mine $mine,
\Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
\Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
array $data = [],
) {
हालाँकि, इसने तर्क क्रम को बदल दिया। पूरी तरह से ऑब्जेक्ट प्रबंधित किए गए एक वर्ग में, यह एक समस्या नहीं होगी। हालाँकि, तथ्य यह है कि ये अमूर्त वर्ग प्रकार संकेत मौजूद हैं कि Magento सिस्टम के कुछ हिस्से हैं जो मैन्युअल रूप से (ऑब्जेक्ट प्रबंधक या DI के माध्यम से नहीं) CRUD ऑब्जेक्ट्स को इंस्टेंट करते हैं और उन ऑब्जेक्ट्स में पास होते हैं जो उस विशिष्ट क्रम में टाइप संकेत के अनुरूप होते हैं ।
क्या यह सुरक्षित है? एक सार मॉडल के निर्माता में इन अमूर्त कक्षाएं सिर्फ विरासत कोड हैं, और इसका उपयोग नहीं किया गया है? या सिस्टम के हिस्से अभी भी इनका उपयोग करते हैं, जिसका अर्थ है कि सीआरयूडी मॉडल में निर्भरता को इंजेक्ट करना संभव नहीं है?