ম্যাজেন্টো 2 সিআরইউডি মডেলের মধ্যে নির্ভরতা ইনজেকশন করা সম্ভব?
যে - Magento 2 একটি বেস বিমূর্ত মডেল বর্গ আছে: Magento\Framework\Model\AbstractModel
। আপনি যদি কোনও সাধারণ তৈরি, পড়ুন, আপডেট করুন, মডেল অবজেক্টটি মুছতে চান তবে আপনি এই শ্রেণীটি নিজের শ্রেণীর সাথে প্রসারিত করবেন।
class Foo extends Magento\Framework\Model\AbstractModel
{
}
আপনার মডেলের __construct
পদ্ধতিতে ইঞ্জেকড নির্ভরতা থাকা কি সম্ভব ? আমি চেষ্টা করার পরে, আমি নিম্নলিখিত ত্রুটি পেয়ে শেষ করছি।
মারাত্মক ত্রুটি: অ্যাবস্ট্রাক্ট ক্লাস ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ মডেল \ রিসোর্সমোডেল st অ্যাবস্ট্রাক্ট রিসোর্স ইনস্ট্যান্ট করতে পারে না
অপরাধী মনে হয় 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
) যে হয় না Magento বস্তুর ম্যানেজার ইন্টারফেসগুলি। তারা বিমূর্ত ক্লাস। যখন আমি এই ক্লাসটি প্রসারিত করি এবং আমার ইঞ্জেকড নির্ভরতা যুক্ত করার চেষ্টা করি
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);
}
}
ম্যাজেন্টো বিলেস যখন অবজেক্ট ম্যানেজার বিমূর্ত ক্লাসগুলি ইনস্ট্যান্ট করার চেষ্টা করে।
আমি আমার অবজেক্ট নির্ভরতা বিমূর্ত ক্লাসের সামনে সরিয়ে "ঠিক" করতে পারি
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 = [],
) {
তবে এটি আর্গুমেন্টের আদেশকে পরিবর্তন করেছে। যে ক্লাসে পুরোপুরি অবজেক্ট ম্যানেজ করা হয়েছিল, তাতে কোনও সমস্যা হবে না। যাইহোক, এই বিমূর্ত শ্রেণীর ধরণের ইঙ্গিতগুলি বোঝায় যে ম্যাজেন্টো সিস্টেমের এমন কিছু অংশ রয়েছে যা ম্যানুয়ালি (যেমন অবজেক্ট ম্যানেজার বা ডিআইয়ের মাধ্যমে নয়) সিআরইউডি অবজেক্টগুলিকে ইনস্ট্যান্ট করবে এবং সেই নির্দিষ্ট ক্রমে যে জাতীয় ইঙ্গিতগুলির সাথে সামঞ্জস্য করবে এমন বস্তুগুলিতে পাস করবে ।
এটি কি নিরাপদ? অর্থাত্ এই বিমূর্ত ক্লাসগুলি কি কোনও বিমূর্ত মডেলের কনস্ট্রাক্টারে কেবল লিগ্যাসি কোড রয়েছে, এবং ব্যবহৃত হচ্ছে না? বা সিস্টেমের অংশগুলি এখনও এগুলি ব্যবহার করবে, যার অর্থ একটি সিআরইউডি মডেলটির উপর নির্ভরতা ইনজেকশন করা সম্ভব নয়?