Magento 2'de varien nesnesi nasıl oluşturulur?


16

Magento 1'de bunun gibi varien nesnesi oluşturabiliriz

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

Magento 2'de nesne nasıl oluşturulur?

Yanıtlar:


32

Magento 2'de Varien_Objecteşdeğer olan \Magento\Framework\DataObject.nesne olduğu için sınıf adı DataObject için Nesne değiştirildi amaçlı sözcük içinde PHP 7. Yani şöyle bir şey kullanabilirsiniz:

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

2018 Güncellemesi

Bu cevap, asıl sorunun cevabını gerçek bir kod örneği bağlamında değil, en özlü şekilde göstermeyi amaçlamıştır. Her ne kadar soruyu cevaplasa da \Magento\Framework\DataObject, yeni olsa da Varien_Object, uygulama Magento 2 en iyi uygulamasıyla% 100 değildi. @MatthiasKleine'nin işaret ettiği gibi, Magento 2 kodunuzda nesneler oluşturmak için en iyi uygulama , kurucu aracılığıyla sınıfınıza bir fabrika enjekte etmek ve nesnenizi oluşturmak için bu fabrikayı kullanmak için Magentos DI çerçevesini kullanmaktır. Bunu göz önünde bulundurarak, kendi kodunuzda bir DataObject oluşturmak için DI'yi kullanmak şöyle görünmelidir:

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
Bu, 'phpcs --standard = MEQP2' çalıştırılırken bir uyarı verir: Doğrudan nesne somutlaştırması (\ Magento \ Framework \ DataObject nesnesi) Magento 2'de önerilmez.
Jeroen Vermeulen - MageHost

1
@ JeroenVermeulen-MageHost doğru, ancak sizi olası bir hatadan haberdar etmek için sadece bir uyarı . Çünkü, bağımlılık enjeksiyonunda ve fabrikalarda hiçbir faydası olmadığını savunuyorum. Sonuçta sadece yüceltilmiş bir dizi. DataObject
Fabian Schmengler

Nesneye birden çok dizi değeri nasıl atanır? @Andrew
Dhaduk Mitesh

Bunun $obj->setData($item)yerine kullanmak daha iyi olacaktır . $obj->setItem($item)Bu yolla $objyöntemi doğrudan kullanarak herhangi bir alan değeri elde edebilirsiniz . Like $obj->getName()vb.
Patrick W

13

Nesneyi 'yeni' ile oluşturmak yerine DI (Bağımlılık Enjeksiyonu) kullanarak Fabrika sınıfını enjekte etmeli ve o fabrikayı DataObjects'in yeni örneklerini oluşturmak için kullanmalısınız.

/**
 * @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
Bu şekilde PSR vb MEQP / MEQP2 / gibi standart kodlama takip zaman, veri nesnesini ilan için doğru yolu ... Teşekkürler ... olduğunu
Bhavik

Çok teşekkürler -): Benim için cazibe gibi çalışıyor.
Charvi Parikh

Nesneye birden çok dizi değeri nasıl atanır? @Matthias
Dhaduk Mitesh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.