Yanıtlar:
Magento 2'de Varien_Object
eş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);
}
}
DataObject
$obj->setData($item)
yerine kullanmak daha iyi olacaktır . $obj->setItem($item)
Bu yolla $obj
yöntemi doğrudan kullanarak herhangi bir alan değeri elde edebilirsiniz . Like $obj->getName()
vb.
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();
}