Combinando un comentario en otro Magento 2
Si necesita compartir algún valor calculado, coloque el comportamiento de cálculo para separar el objeto y llamarlo desde los bloques que requieren ese valor. Se desaconseja el registro porque es un estado global mutable y nunca está seguro de lo que obtendrá de allí.
¿Hay alguna manera de crear un Objeto en Magento 2 con estado inmutable? Magento\Framework\Registry
Se desaconseja el uso del registro ( ) porque es un estado mutable global (presumiblemente porque, aunque el register
método no le permite cambiar una clave existente, puede desarmarla y luego restablecerla).
Sin embargo, el mismo problema existe para cualquier objeto en Magento 2. Si tuviera que crear un objeto
namespace Pulsestorm\Helloworld\Model;
use Magento\Framework\DataObject;
class ViewVars extends DataObject
{
}
Luego, la inyección automática de dependencia del constructor asegura que cualquiera pueda agarrar ese objeto compartido. Si el objeto no se comparte, la vista / bloque no puede tomarlo.
En teoría, podríamos hacer 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;
}
}
Pero eso parece mucho trabajo para una tarea tan común como establecer variables individuales para una vista . ¿Hay una mejor manera en Magento 2 para crear objetos de datos inmutables que desconozco?
fuente
Respuestas:
No, actualmente no hay una mejor manera en Magento 2 para crear objetos de datos inmutables. Puede crearlo, por ejemplo, mediante captadores de generación y constructor desde la interfaz.
fuente