উত্তর:
ম্যাজেন্টো সরাসরি অবজেক্টম্যানেজারের ব্যবহারকে নিরুৎসাহিত করে। এটি এমন পরিষেবা ক্লাস সরবরাহ করে যা এটিকে সমস্ত দৃশ্যের জন্য বিমূর্ত করে তোলে।
সমস্ত ইনজেকশনযোগ্য (মডেল )গুলির জন্য আপনাকে কারখানাটি ব্যবহার করতে হবে:
সুরক্ষিত $ পেজ ফ্যাক্টরি;
পাবলিক ফাংশন __ কনস্ট্রাক্ট (\ ম্যাজেন্টো \ সেন্টিমিটার \ মডেল \ পেজ ফ্যাক্টরি $ পেজ ফ্যাক্টরি)
{
$ এই-> পেজফ্যাক্টরি = $ পেজ ফ্যাক্টরি;
}
পাবলিক ফাংশন কিছুসংক্ষেপ ()
{
...
$ পৃষ্ঠা = $ এটি-> পৃষ্ঠা ফ্যাক্টরি-> তৈরি ();
...
}
আপনাকে যা করতে হবে তা হল কনস্ট্রাক্টরে কাঙ্ক্ষিত মডেলের কারখানাটি জিজ্ঞাসা করা ask আপনি Magento বা সংকলক চালানোর সময় এটি স্বয়ংক্রিয়ভাবে উত্পন্ন হবে।
আপনি এটি এর মতো করতে পারেন:
$model = $this->_objectManager->create('Full\Model\Class\Name\Here');
তবে আপনাকে নিশ্চিত করতে হবে যে _objectManager সদস্যের উপস্থিতি ।
বেশিরভাগ ক্লাসে এটি হওয়া উচিত, তবে এটি নির্মাণকারীর মধ্যে এটি ইনজেকশন না দিলে। এটার মত:
protected $_objectManager;
public function __construct(
...,
\Magento\Framework\ObjectManager $objectManager,
....
){
....
$this->_objectManager= $objectManager;
....
}
[এক বছর পরে সম্পাদনা করুন]
উপরের উত্তরটি কার্যকর হলেও, এটি সর্বোত্তম অনুশীলন নয়। এটি করার সঠিক উপায়ের জন্য অ্যান্টনের উত্তর দেখুন।
টেকনিক্যালি আপনি একটি দৃষ্টান্ত আছে \Magento\Framework\ObjectManagerআপনি কল করতে পারেন createএর getএবং এই আপনি বস্তুর আপনি ইচ্ছা দেব। তবে আপনি এটি নির্মাণের মাধ্যমে নির্ভরতা ইনজেকশনটির দিকে ম্যাজেন্টো 2 শিফট হিসাবে ব্যবহার করতে চান তা নির্ভর করে ।