Довершення коментаря в іншому Magento 2
Якщо вам потрібно поділити якесь обчислене значення, покладіть обчислювальну поведінку на окремий об'єкт і викликайте його з блоків, які потребують цього значення. Реєстр не відсторонений, тому що це глобальний стан, що змінюється, і ви ніколи не знаєте, що звідти отримаєте.
Чи є спосіб створити Об'єкт у Magento 2 з незмінним станом? Використання реєстру ( 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 створити незмінні об’єкти даних, про які я не знаю?