Magento 2: Types de sortie de contrôleur

13 septembre 2018 0 Par admin
Magento 2: Types de sortie de contrôleur

Désormais Magento 2 introduit l’objet de résultat Framework pour la gestion des requêtes qui traiteront des résultats autres que ceux de la page, tels que JSON, les redirections et bien autres avec des retours non html.

Donc, pour utiliser la factory de résultats dans votre contrôleur dans votre structure de contrôleur, utilisez simplement le code suivant:

$this->resultFactory = $context->getResultFactory();

Ensuite, dans la méthode run, écrivez simplement ce qui suit:

$result = $resultRedirect = $this->resultFactory->create($type);

La valeur du type doit donc être l’une des constantes suivantes:

\Magento\Framework\Controller\ResultFactory::TYPE_JSON
\Magento\Framework\Controller\ResultFactory::TYPE_RAW
\Magento\Framework\Controller\ResultFactory::TYPE_REDIRECT
\Magento\Framework\Controller\ResultFactory::TYPE_FORWARD
\Magento\Framework\Controller\ResultFactory::TYPE_LAYOUT
\Magento\Framework\Controller\ResultFactory::TYPE_PAGE

 

JSON
Ceci est pour renvoyer un objet JSON à partir d’un contrôleur avec correct type MIME dans la réponse. Pour retourner json, nous pouvons exécuter deux méthodes:

return $result->setData([‘variable’ => ‘valeur’]);

La première méthode vous permet de passer un tableau associatif php dont le framework Magento 2 va exécuter la sérialisation pour vous.

return $result->setJsonData(‘{“variable”: “value”}’);

La seconde méthode vous permet de définir une chaîne de caractères json brut pour répondre au lieu de laisser Magento 2 gérer la sérialisation de la réponse.

 

RAW
Ceci sert à définir la chaîne brute et le contenu binaire. Pour l’utiliser, lancez simplement ce qui suit.

return $result->setHeader(‘Content-Type’, ‘text/plain’)->setContents(‘string’);

 

REDIRECT
Ceci permet de rediriger un utilisateur vers une autre page via des redirections basées sur 301, 302 et 307. Pour le mettre en place, utilisez simplement ce qui suit:

return $result->setUrl(‘https://www.google.fr’);
return $result->setPath(‘checkout’,[‘_secure’ => true]);

 

FORWARD
Parfois, vous voudrez faire une redirection interne vers un autre contrôleur sans que le client fasse une seconde request à cet effet. Pour l’utiliser, procédez comme suit:

return $result->setModule(‘moduleName’)->setController(‘controller’)->setParam([‘id’ => 1])->view(‘action’);
return $result->setController(‘controller’)->view(‘action’);

La convention est que le contrôleur doit être le nom du dossier dans le dossier “Controller” de votre module et que l’action doit être le nom de votre fichier php action sans l’extension php. En ce qui concerne moduleName, vous pouvez normalement savoir ce que cela devrait être dans votre fichier routes.xml et cela devrait être la valeur définie dans l’attribut frontName défini dans votre déclaration de route.xml

Veuillez noter que si nomModule n’est pas fourni, Magento 2 supposera que le module est l’actuel.

 

LAYOUT et PAGE
Les deux derniers consistent simplement à utiliser la gestion de la présentation (layout handling) xml pour rendre le contenu. La seule différence est que la mise en page ne comportera pas de descripteur de présentation par défaut, vous devrez donc affecter des descripteurs de mise en page et Page assignera les descripteurs par défaut et spécifiques au contrôleur. Comme prévu, Page étend l’objet Layout car la seule différence réside dans le fait que la mise en page ne suppose aucun gestionnaire de disposition.

Please follow and like us: