답변:
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);
}
}
DataObject
$obj->setData($item)
대신 사용 하는 것이 좋습니다. $obj->setItem($item)
이렇게하면 $obj
메서드를 직접 사용하는 모든 필드 값을 얻을 수 있습니다. 마찬가지로 $obj->getName()
등
'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();
}