ম্যাজেন্টো 2 তে কীভাবে ভ্যারিয়েন অবজেক্ট তৈরি করবেন?


16

ম্যাজেন্টো 1 এ আমরা এর মতো ভেরিয়েন অবজেক্ট তৈরি করতে পারি

$collection = new Varien_Data_Collection(); 
$varienObject = new Varien_Object();
$varienObject->setData($data);
$varienObject->setItem($item);
$collection->addItem($varienObject);

কীভাবে ম্যাজেন্টো 2 তে অবজেক্ট তৈরি করবেন?

উত্তর:


32

Magento 2 Varien_Objectসমতুল্য হয় \Magento\Framework\DataObject.বর্গ নাম DataObject আপত্তি থেকে পরিবর্তিত করা হয়েছে কারণ বস্তুর একটি হল সংরক্ষিত শব্দ মধ্যে PHP 7। সুতরাং আপনি যেমন কিছু ব্যবহার করতে পারেন:

$obj = new \Magento\Framework\DataObject();
$obj->setItem($item);

আপডেট 2018

এই উত্তরটি উত্তরটির মূল প্রশ্নের উত্তর সর্বাধিক সংক্ষিপ্ত উপায়ে ব্যাখ্যা করতে চেয়েছিল এবং বাস্তব কোড উদাহরণের প্রসঙ্গে নয়। যদিও এটি প্রশ্নের উত্তর দিয়েছে, \Magento\Framework\DataObjectনতুন Varien_Object, তবে বাস্তবায়ন 100% ম্যাজেন্টো 2 সেরা অনুশীলনের সাথে সামঞ্জস্য ছিল না। @ ম্যাথিয়াসক্লিন যেমন উল্লেখ করেছেন, আপনার কোডে অবজেক্ট তৈরির জন্য ম্যাজেন্টো 2 সেরা অনুশীলন হ'ল ম্যাগেন্টোস ডিআই ফ্রেমওয়ার্কটি কনস্ট্রাক্টরের মাধ্যমে আপনার ক্লাসে একটি কারখানা ইনজেক্ট করার জন্য এবং সেই ফ্যাক্টরিটি আপনার অবজেক্ট তৈরি করতে ব্যবহার করা। এই বিষয়টি মনে রেখে, ডিআই ব্যবহার করে আপনার নিজের কোডে একটি ডেটাঅবজেক্ট তৈরি করতে এই জাতীয় কিছু দেখতে পাওয়া উচিত:

namespace My/Module;

class Example {
    private $objectFactory;

    public function __construct(
        \Magento\Framework\DataObjectFactory $objectFactory
    ) {
        $this->objectFactory = $objectFactory;
        parent::__construct();
    }

    public function doSomething($item)
    {
        $obj = $this->objectFactory->create();
        $obj->setData('item', $item);
        //or
        $obj->setItem($item);
    }
}

1
'পিএইচপিসিএস - স্ট্যান্ডার্ড = এমইকিউপি 2' চালানোর সময় এটি একটি সতর্কতা ছুঁড়ে দেয়: ডাইরেক্ট অবজেক্ট ইনস্ট্যান্টেশন (\ ম্যাজেন্টো me ফ্রেমওয়ার্ক \ ডাটাঅবজেক্টের অবজেক্ট) ম্যাজেন্টো 2
জেরোইন ভার্মিউলেন - ম্যাজহোস্ট

1
@ জেরোইনমর্মেন-ম্যাগহোস্ট ঠিক আছে, তবে আপনাকে সম্ভাব্য ত্রুটি সম্পর্কে সচেতন করতে এটি কেবল একটি সতর্কতা । এর জন্য , আমি যুক্তি দিয়েছি যে নির্ভরতা ইনজেকশন এবং কারখানাগুলিতে কোনও লাভ নেই। সর্বোপরি এটি কেবল গৌরবময় অ্যারে। DataObject
ফ্যাবিয়ান শেমংলার

কীভাবে অবজেক্টে একাধিক অ্যারে মান নির্ধারণ করা যায়? @ অ্যান্ড্রু
duদুক মিতেশ

এর $obj->setData($item)পরিবর্তে ব্যবহার করা আরও ভাল $obj->setItem($item)হবে আপনি $objসরাসরি পদ্ধতি ব্যবহারের যে কোনও ক্ষেত্রের মান পেতে সক্ষম হবেন । ভালো লেগেছে $obj->getName()ইত্যাদি
প্যাট্রিক ওয়াট

13

'নতুন' দিয়ে অবজেক্টটি তৈরি করার পরিবর্তে কারখানার ক্লাসটি ইনজেক্ট করতে আপনার ডিআই (ডিপেন্ডেন্সি ইনজেকশন) ব্যবহার করা উচিত এবং ডেটাঅবজেক্টসের নতুন দৃষ্টান্ত তৈরি করতে সেই কারখানাটি ব্যবহার করা উচিত।

/**
 * @var \Magento\Framework\DataObjectFactory
 */
private $dataObjectFactory;

public function __construct(
    // ...
    \Magento\Framework\DataObjectFactory $dataObjectFactory
) {
    parent::__construct();

    $this->dataObjectFactory = $dataObjectFactory;
}

public function yourCode()
{
    $dataObject = $this->dataObjectFactory->create();
}

1
আপনি এমইকিউপি / এমইকিউপি 2 / পিএসআর ইত্যাদির মতো কোডিং স্ট্যান্ডার্ড অনুসরণ করার সময় এই উপায়ে ডেটা অবজেক্টের ঘোষণার জন্য সঠিক উপায় ... ধন্যবাদ ...
ভাওয়িক

অনেক অনেক ধন্যবাদ -): এটি আমার জন্য কবজির মতো কাজ করে।
চরভি পরীখ

কীভাবে অবজেক্টে একাধিক অ্যারে মান নির্ধারণ করা যায়? @ মাথিয়াস
duদুক মিতেশ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.