Faire concorder un commentaire dans un autre Magento 2
Si vous devez partager une valeur calculée, définissez le comportement de calcul sur un objet séparé et appelez-le à partir de blocs qui nécessitent cette valeur. Le registre est déconseillé car il s'agit d'un état mutable global et vous n'êtes jamais sûr de ce que vous obtiendrez à partir de là.
Existe-t-il un moyen de créer un objet dans Magento 2 avec un état immuable? L'utilisation du registre ( Magento\Framework\Registry
) est déconseillée car il s'agit d'un état mutable global (vraisemblablement parce que, bien que la register
méthode ne vous permette pas de modifier une clé existante, vous pouvez la désactiver puis la réinitialiser).
Cependant - le même problème existe pour tout objet dans Magento 2. Si je devais créer un objet
namespace Pulsestorm\Helloworld\Model;
use Magento\Framework\DataObject;
class ViewVars extends DataObject
{
}
Ensuite, l'injection automatique de dépendances du constructeur garantit que n'importe qui peut saisir cet objet partagé. Si l'objet n'est pas partagé, la vue / le bloc ne peut pas le saisir.
En théorie, nous pourrions faire quelque chose comme
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;
}
}
Mais cela semble être beaucoup de travail pour une tâche aussi courante que la définition de variables individuelles pour une vue . Existe-t-il un meilleur moyen dans Magento 2 de créer des objets de données immuables que je ne connais pas?
la source
Réponses:
Non, il n'y a actuellement pas de meilleur moyen dans Magento 2 pour créer des objets de données immuables. Vous pouvez le créer, par exemple par génération de getters et constructeur à partir de l'interface.
la source