Dans Magento 1, si vous souhaitez transmettre des données de votre action Controller à la "Vue" (c'est-à-dire un bloc dans votre mise en page, vous pouvez)
Ajouter une valeur / un objet au registre global via
Mage::register
Récupérer directement un objet bloc et définir les propriétés des données sur l'objet bloc récupéré après l'exécution
loadLayout
Appeler des méthodes sur des objets bloc dans des
phtml
fichiers et faire en sorte que les objets bloc utilisent la couche modèle / base de données pour lire les données précédemment enregistrées dans l'action du contrôleur
L'utilisation de méthodes d'objet bloc pour lire à partir de la base de données semble toujours fonctionner dans Magento 2 - ce qui est approprié pour certains types d'opérations. cependant,
Il n'y a plus de registre mondial dans Magento 2 (ou y en a-t-il?)
Le système de disposition fonctionne maintenant en créant un objet de page via une usine, et vous ne pouvez pas saisir les références de bloc de la même manière que dans Magento 1
Est-il possible dans Magento 2 de transmettre des données directement d'une action de contrôleur vers une vue? Ou est-ce un modèle trop direct pour le courageux nouveau monde Design Pattern ™ de Magento? S'il s'agit d'un modèle trop direct, que faire s'il y a des informations calculées que nous voulons afficher dans un modèle, mais que nous ne voulons pas stocker ces informations dans un système avec état (c'est-à-dire que nous ne voulons pas les enregistrer dans le base de données)
Je peux penser à quelques façons différentes de pirater cela ensemble moi-même - mais je suis intéressé par la façon dont Magento 2 veut que vous le fassiez.
Remarque : je me rends compte qu'il est possible de récupérer une instance de bloc dans une action de contrôleur en utilisant quelque chose comme ceci
$resultPage = $this->resultPageFactory->create();
$block = $resultPage->getLayout()->getBlock('catalog.wysiwyg.js');
var_dump(spl_object_hash($block));
Le code principal de Magento 2 le fait souvent. Cependant - l'objet bloc récupéré dans l'objet contrôleur semble être un objet différent de celui disponible dans un phtml
modèle via soit $this
ou $block
(le premier ( $this
) semble être l'objet qui rend réellement le modèle, tandis que le dernier ( $block
) semble être une instance de type Magento Block).
#File: path/to/template.phtml
var_dump(spl_object_hash($block));
var_dump(spl_object_hash($this));
Je dis "semble être" parce que si je définit des données dans la méthode d'action du contrôleur, elles ne sont pas disponibles dans le phtml
modèle - et si je compare les spl_object_hash
résultats ci-dessus, j'obtiens trois hachages différents. Cependant, je suis assez nouveau pour tout cela que ce qui précède pourrait être une autre erreur que j'ai faite - donc si vous avez pu définir des données sur des blocs et les récupérer dans un modèle, j'aimerais en entendre parler !
Vous ne devez pas passer de variables de l'action du contrôleur à la vue. Utilisez le bloc pour passer des variables à afficher (moteur de modèle).
la source