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.object가 예약어 이므로 클래스 이름이 Object에서 DataObject로 변경 되었습니다 PHP 7. 따라서 다음과 같은 것을 사용할 수 있습니다.

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

2018 업데이트

이 답변은 실제 코드 예제의 맥락이 아닌 가능한 가장 간결한 방식으로 원래 질문에 대한 답변을 보여주기위한 것입니다. 질문에 대답했지만 \Magento\Framework\DataObject새로운 것이지만 Varien_Object구현은 Magento 2 모범 사례와 100 % 일치하지 않았습니다. @MatthiasKleine이 지적했듯이 코드에서 객체를 만드는 Magento 2 모범 사례는 Magentos 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 \ Framework \ DataObject의 개체)는 Magento 2에서 권장하지 않습니다.
Jeroen Vermeulen-MageHost

1
@ JeroenVermeulen-MageHost는 맞지만 잠재적 인 오류 를 알기 위해 경고 일뿐 입니다. 의 경우, 의존성 주입과 팩토리에는 이점이 없다고 주장합니다. 결국 영광스러운 배열입니다. DataObject
Fabian Schmengler

객체에 여러 배열 값을 할당하는 방법은 무엇입니까? 앤드류
Dhaduk Mitesh

이 방법 $obj->setData($item)대신 사용 하는 것이 좋습니다. $obj->setItem($item)이렇게하면 $obj메서드를 직접 사용하는 모든 필드 값을 얻을 수 있습니다. 마찬가지로 $obj->getName()
패트릭 W

13

'new'로 오브젝트를 작성하는 대신 DI (Dependency Injection)를 사용하여 Factory 클래스를 주입하고 해당 팩토리를 사용하여 새 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

많이 감사합니다-) : 그것은 나를 위해 매력처럼 작동합니다.
Charvi Parikh

객체에 여러 배열 값을 할당하는 방법은 무엇입니까? @ Matthias
Dhaduk Mitesh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.