Em Magento 2 o Varien_Objectequivalente é \Magento\Framework\DataObject.O nome de classe foi mudado de objecto a objecto dataObject porque é uma palavra reservada no PHP 7. Então você pode usar algo como:
Esta resposta pretendia ilustrar uma resposta da pergunta original da maneira mais sucinta possível e não no contexto de um exemplo de código real. Embora tenha respondido à pergunta, \Magento\Framework\DataObjecté a novidade Varien_Object, a implementação não estava 100% alinhada com as melhores práticas do Magento 2. Como o @MatthiasKleine apontou, a melhor prática do Magento 2 para criar objetos no seu código é usar a estrutura Magentos DI para injetar uma fábrica em sua classe através do construtor e usar essa fábrica para criar seu objeto. Com isso em mente, usar o DI para criar um DataObject em seu próprio código deve ser algo como isto:
Isso gera um aviso durante a execução 'phpcs --standard = MEQP2': instanciação objeto direto (objeto da \ Magento \ Framework \ DataObject) é desencorajado em Magento 2.
Jeroen Vermeulen - MageHost
11
@ JeroenVermeulen-MageHost certo, mas é apenas um aviso , para alertá-lo sobre um possível erro. Quanto a isso DataObject, eu argumentaria que não há benefício na injeção de dependência e nas fábricas. Afinal, é apenas uma matriz glorificada.
Fabian Schmengler
Como atribuir vários valores de matriz no objeto? @Andrew
Dhaduk Mitesh
Será melhor usar em $obj->setData($item)vez de $obj->setItem($item)Dessa forma, você poderá obter qualquer valor de campo $objusando o método diretamente. Como $obj->getName()etc.
Patrick W
13
Em vez de criar o objeto com 'novo', você deve usar DI (Injection Dependency Injection) para injetar a classe Factory e usá-lo para criar novas instâncias do DataObjects.
DataObject
, eu argumentaria que não há benefício na injeção de dependência e nas fábricas. Afinal, é apenas uma matriz glorificada.$obj->setData($item)
vez de$obj->setItem($item)
Dessa forma, você poderá obter qualquer valor de campo$obj
usando o método diretamente. Como$obj->getName()
etc.Em vez de criar o objeto com 'novo', você deve usar DI (Injection Dependency Injection) para injetar a classe Factory e usá-lo para criar novas instâncias do DataObjects.
fonte