Ласточкин хвост от комментария в другом Magento 2
Если вам нужно поделиться некоторым вычисленным значением, поместите расчетное поведение в отдельный объект и вызовите его из блоков, которым требуется это значение. Реестр не рекомендуется, потому что это глобальное изменчивое состояние, и вы никогда не уверены, что вы получите оттуда.
Есть ли способ создать Объект в Magento 2 с неизменным состоянием? Использование registry ( Magento\Framework\Registry
) не рекомендуется, потому что это глобальное изменяемое состояние (возможно, потому что, хотя register
метод не позволяет вам изменить существующий ключ, вы можете сбросить и затем сбросить этот ключ).
Однако - та же проблема существует для любого объекта в Magento 2. Если бы я должен был создать объект
namespace Pulsestorm\Helloworld\Model;
use Magento\Framework\DataObject;
class ViewVars extends DataObject
{
}
Затем автоматическое внедрение зависимостей в конструктор гарантирует, что любой может получить этот общий объект. Если объект не является общим, то вид / блок не может его захватить.
Теоретически мы могли бы сделать что-то вроде
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;
}
}
Но это похоже на большую работу для такой общей задачи, как установка отдельных переменных для представления . Есть ли лучший способ в Magento 2 создавать неизменяемые объекты данных, о которых я не знаю?