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.オブジェクトであるため、クラス名のDataObjectにObjectから変更された予約語におけるPHP 7。したがって、次のようなものを使用できます。

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

更新2018

この回答は、実際のコード例のコンテキストではなく、可能な限り簡潔な方法で元の質問に対する回答を説明することを目的としています。\Magento\Framework\DataObject新しい質問ですが、Varien_ObjectMagento 2のベストプラクティスに沿った実装は100%ではありませんでした。@MatthiasKleineが指摘したように、コード内にオブジェクトを作成するMagento 2のベストプラクティスは、Magento DIフレームワークを使用して、コンストラクターを介してクラスにファクトリーを注入し、そのファクトリーを使用してオブジェクトを作成することです。それを念頭に置いて、DIを使用して独自のコードでDataObjectを作成すると、次のようになります。

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のオブジェクト)
イェルーンバーミューレン- MageHost

1
@ JeroenVermeulen-MageHostの権利ですが、潜在的なエラーを認識するための単なる警告です。については、依存関係の注入と工場には利点がないと主張します。結局のところ、それはただ栄光に満ちた配列です。DataObject
ファビアンシュメングラー

オブジェクトに複数の配列値を割り当てる方法は?@アンドリュー
ダダックミテシュ

この方法の$obj->setData($item)代わりに使用する $obj->setItem($item)ことをお勧めします$obj。使用方法のフィールド値を直接取得できます。同様$obj->getName()など
パトリック・W

13

「new」でオブジェクトを作成する代わりに、DI(Dependency Injection)を使用してFactoryクラスを注入し、そのファクトリを使用してDataObjectの新しいインスタンスを作成する必要があります。

/**
 * @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
この方法は、あなたがPSRなどMEQP / MEQP2 /のようなコーディング標準に従うとき、データオブジェクトを宣言するための正しい方法です...おかげで...
Bhavik

たくさんありがとう-):それは私にとって魅力のように機能します。
シャルビパリフ

オブジェクトに複数の配列値を割り当てる方法は?@マティアス
ダダックミテシュ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.