Je vois que partout où la demande est impliquée dans Magento 2, la demande est une implémentation de \Magento\Framework\App\RequestInterface
.
Cette interface ne contient pas les méthodes getPost
(utilisées dans \Magento\Catalog\Controller\Adminhtml\Category\Widget\CategoriesJson
) et getPostValue
(utilisées dans \Magento\Catalog\Controller\Adminhtml\Product\Save
) mais elles sont toujours appelées.
Est-il OK de supposer que ces méthodes seront toujours là pour les requêtes http?
ou devrais-je utiliser autre chose dans mes modules pour obtenir les $_POST
données?
magento2
http-request
Marius
la source
la source
Réponses:
Ne pense pas. Ils rompent leur propre contrat de classe. Comme vous pouvez l'imaginer, ce n'est pas du tout OOP-ish.
Selon la recommandation habituelle, je resterais à l'écart de tout ce qui n'est pas déclaré
Magento\Framework\App\RequestInterface
car a) vous ferez plaisir à Liskov et parce que b) ils se rendront vite compte du problème et le corrigeront (espérons-le), cassant ainsi votre code (ou non; mais s'ils le font, ils sont justifiés: vous n'utilisiez pas le contrat API, non?).S'ils ne le résolvent pas, ils auront une implémentation d'API très performante (c'est-à-dire
Magento\Framework\App\Request\Http
) que personne n'utilisera vraiment .Restez toujours dans le contrat!
la source
RequestInterface
. Mais ce que vous dites semble raisonnable. J'éviterai autant que possible ces méthodes.if($this->getRequest() instanceof \Magento\Framework\App\Request\Http) {
- si ce contrôle réussit, vous pouvez utiliser ces paramètres!getPostValue()
est écrit enlib\internal\Magento\Framework\HTTP\PhpEnvironment\Request.php
alors il obtient la
getPost
valeur devendor\zendframework\zend-http\src\Request.php
J'espère que vous obtiendrez au moins un indice.
Et oui, vous pouvez utiliser
Pour obtenir de la
post
valeur, vous pouvez également vérifier leContact
module pour obtenir un indicela source
Pour obtenir des données Post dans le contrôleur, vous devez utiliser les éléments suivants dans votre fonction d'exécution.
la source
Dans Magento 2.1, si nous obtenons l'objet de requête en appelant
$this->getRequest()
, il retourneraMagento\Framework\App\Request
ce qui est étenduMagento\Framework\HTTP\PhpEnvironment\Request
. c'est pourquoi la méthode getPostValue peut être appelée.J'ai eu le problème lorsque j'essaie de créer un test unitaire pour mon contrôleur qui appelle la getPostValue. Comme getPostValue n'est pas défini dans RequestInterface, au lieu de créer directement un objet factice pour RequestInterface, nous créons l'objet factice pour
Magento\Framework\App\Request\Http
.la source
Non.
La méthode sera modifiée dans la future version si elle n'est pas dans l'interface. Nous devons utiliser autant que possible les méthodes de l'interface. En raison du contrat d'API, les méthodes existantes dans l'API ne seront pas modifiées, sauf dans les mises à niveau de versions majeures.
Oui.
Dans l'interface
Magento\Framework\App\RequestInterface
, la méthodegetParams()
pourrait obtenir le tableau de données post, la méthodegetParam($key, $defaultValue = null)
pourrait obtenir les données spécifiques dans post.la source