Magento 2 में varien ऑब्जेक्ट कैसे बनाएं?


16

Magento 1 में हम इस तरह के varien ऑब्जेक्ट बना सकते हैं

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

Magento 2 में ऑब्जेक्ट कैसे बनाएं?

जवाबों:


32

Magento 2 में Varien_Objectसमतुल्य है \Magento\Framework\DataObject.क्लास का नाम ऑब्जेक्ट से डेटाऑबजेक्ट में बदल दिया गया था क्योंकि ऑब्जेक्ट एक आरक्षित शब्द है PHP 7। तो आप कुछ इस तरह का उपयोग कर सकते हैं:

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

अपडेट 2018

यह उत्तर एक वास्तविक कोड उदाहरण के संदर्भ में संभव और नहीं सबसे अधिक संभव तरीके से मूल प्रश्न के उत्तर का वर्णन करने का इरादा रखता है। हालाँकि यह प्रश्न का उत्तर देता \Magento\Framework\DataObjectहै, नया है Varien_Object, कार्यान्वयन मैगेंटो 2 सर्वश्रेष्ठ अभ्यास के अनुरूप 100% नहीं था। जैसा कि @MatthiasKleine ने बताया, अपने कोड में ऑब्जेक्ट बनाने के लिए Magento 2 का सबसे अच्छा अभ्यास है , कंस्ट्रक्टर के माध्यम से अपनी कक्षा में एक फैक्ट्री को इंजेक्ट करने के लिए Magentos DI फ्रेमवर्क का उपयोग करना और अपनी फैक्ट्री बनाने के लिए उस फैक्ट्री का उपयोग करना। इसे ध्यान में रखते हुए, अपने स्वयं के कोड में एक DataObject बनाने के लिए DI का उपयोग करके कुछ इस तरह दिखना चाहिए:

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
'Phpcs --standard = MEQP2' चलाते समय यह चेतावनी देता है: Magento 2 में प्रत्यक्ष वस्तु तात्कालिकता (\ Magento \ Framework \ DataObject की वस्तु) को हतोत्साहित किया जाता है
- जीरो वेर्मेलेन - मैजहोस्ट

1
@ JeroenVermeulen-MageHost सही है, लेकिन यह सिर्फ एक चेतावनी है , जिससे आपको संभावित त्रुटि के बारे में पता चलता है । इसके लिए DataObject, मेरा तर्क है कि निर्भरता इंजेक्शन और कारखानों में कोई लाभ नहीं है। यह सब के बाद एक महिमामंडित सरणी है।
फाबियान शेंगलर

ऑब्जेक्ट में कई ऐरे वैल्यू कैसे असाइन करें? @ और
धडुक मितेश

इसका उपयोग $obj->setData($item)करने के लिए बेहतर होगा $obj->setItem($item)इस तरह से आप $objसीधे विधि का उपयोग करने के किसी भी क्षेत्र मूल्य प्राप्त करने में सक्षम होंगे । जैसे $obj->getName()आदि
पैट्रिक डब्ल्यू

13

'नए' के ​​साथ ऑब्जेक्ट बनाने के बजाय, आपको फ़ैक्टरी वर्ग को इंजेक्ट करने के लिए DI (डिपेंडेंसी इंजेक्शन) का उपयोग करना चाहिए और उस फैक्ट्री का उपयोग करके DataObjects के नए इंस्टेंसेस बनाने चाहिए।

/**
 * @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
डेटा ऑब्जेक्ट घोषित करने का यह तरीका सही है, जब आप कोडिंग मानक का पालन करते हैं जैसे MEQP / MEQP2 / PSR आदि ... धन्यवाद ...
Bhavik

बहुत बहुत धन्यवाद -): यह मेरे लिए आकर्षण की तरह काम करता है।
चारवी पारीख

ऑब्जेक्ट में कई ऐरे वैल्यू कैसे असाइन करें? @ माथियास
धादुक मितेश
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.