Verzahnen off einen Kommentar in einem anderen Magento 2
Wenn Sie einen berechneten Wert freigeben müssen, setzen Sie das Berechnungsverhalten, um das Objekt zu trennen, und rufen Sie es von Blöcken auf, die diesen Wert benötigen. Die Registrierung wird nicht empfohlen, da es sich um einen global veränderlichen Status handelt und Sie nie sicher sind, was Sie von dort erhalten.
Gibt es eine Möglichkeit, ein Objekt in Magento 2 mit unveränderlichem Status zu erstellen? Von der Verwendung von registry ( Magento\Framework\Registry
) wird abgeraten, da es sich um einen global veränderlichen Status handelt (vermutlich, weil Sie mit dieser register
Methode zwar keinen vorhandenen Schlüssel ändern können , diesen Schlüssel jedoch deaktivieren und dann zurücksetzen können).
Das gleiche Problem besteht jedoch für jedes Objekt in Magento 2. Wenn ich ein Objekt erstellen würde
namespace Pulsestorm\Helloworld\Model;
use Magento\Framework\DataObject;
class ViewVars extends DataObject
{
}
Die automatische Injektion der Konstruktorabhängigkeit stellt dann sicher, dass jeder das gemeinsam genutzte Objekt greifen kann. Wenn das Objekt nicht freigegeben ist, kann die Ansicht / der Block es nicht erfassen.
Theoretisch könnten wir so etwas tun
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;
}
}
Dies scheint jedoch eine Menge Arbeit für eine Aufgabe zu sein, die so häufig ist wie das Festlegen einzelner Variablen für eine Ansicht . Gibt es in Magento 2 eine bessere Möglichkeit, unveränderliche Datenobjekte zu erstellen, die mir nicht bekannt sind?
quelle
Antworten:
Nein, derzeit ist es in Magento 2 nicht besser, unveränderliche Datenobjekte zu erstellen. Sie können es beispielsweise erstellen, indem Sie Getter und Konstruktoren aus der Schnittstelle generieren.
quelle