Szczegółowy komentarz w innym Magento 2
Jeśli chcesz udostępnić część obliczonej wartości, umieść zachowanie obliczeniowe w oddzielnym obiekcie i wywołaj go z bloków, które wymagają tej wartości. Rejestr jest odradzany, ponieważ jest to globalny stan zmienny i nigdy nie masz pewności, co otrzymasz.
Czy istnieje sposób na stworzenie obiektu w Magento 2 z niezmiennym stanem? Korzystanie z rejestru ( Magento\Framework\Registry
) jest odradzane, ponieważ jest to globalny stan zmienny (przypuszczalnie, ponieważ chociaż register
metoda nie pozwala zmienić istniejącego klucza, można go rozbroić, a następnie zresetować).
Jednak - ten sam problem istnieje dla dowolnego obiektu w Magento 2. Gdybym miał utworzyć obiekt
namespace Pulsestorm\Helloworld\Model;
use Magento\Framework\DataObject;
class ViewVars extends DataObject
{
}
Następnie automatyczne wstrzykiwanie zależności od konstruktora zapewnia, że każdy może pobrać ten udostępniony obiekt. Jeśli obiekt nie jest udostępniony, widok / blok nie może go pobrać.
Teoretycznie moglibyśmy zrobić coś takiego
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;
}
}
Ale to wydaje się dużo pracy dla zadania tak powszechnego, jak ustawianie poszczególnych zmiennych dla widoku . Czy istnieje lepszy sposób na tworzenie niezmiennych obiektów danych w Magento 2, o których nie wiem?