Dovetailing fora um comentário em outro Magento 2
Se você precisar compartilhar algum valor calculado, coloque o comportamento de cálculo para separar um objeto e chame-o de blocos que requerem esse valor. O registro é desencorajado porque é um estado mutável global e você nunca sabe ao certo o que obterá a partir daí.
Existe uma maneira de criar um objeto no Magento 2 com estado imutável? O uso do registro ( Magento\Framework\Registry
) é desencorajado porque é um estado mutável global (presumível porque, embora o register
método não permita alterar uma chave existente, você pode desabilitar e redefinir essa chave).
No entanto - o mesmo problema existe para qualquer objeto no Magento 2. Se eu fosse criar um objeto
namespace Pulsestorm\Helloworld\Model;
use Magento\Framework\DataObject;
class ViewVars extends DataObject
{
}
Em seguida, a injeção automática de dependência do construtor garante que qualquer pessoa possa pegar esse objeto compartilhado. Se o objeto não for compartilhado, a visualização / bloco não poderá agarrá-lo.
Em teoria, poderíamos fazer algo como
namespace Pulsestorm\Helloworld\Model;
class ViewVars
{
protected $_data=false;
protected function setData($data)
{
if($_data)
{
throw new Exception("Immutable");
}
$this->_data = $data;
}
public function getData()
{
return $this->_data;
}
}
Mas isso parece muito trabalhoso para uma tarefa tão comum quanto definir variáveis individuais para uma visualização . Existe uma maneira melhor no Magento 2 para criar objetos de dados imutáveis dos quais não estou ciente?