Magento2 comment obtenir une demande


36

Dans Magento 2, comment recevoir un tableau de requêtes? $_POSTet $_GETaussi comme nous l'avons fait dans Magento 1:

Mage::app()->getRequest()->getPost()

Pouvez-vous spécifier dans quelle classe vous voulez les données POST et GET.
— Oscprofessionals

Réponses:


73

Si vous essayez cela depuis un contrôleur qui étend, Magento\Framework\App\Action\Actionvous pouvez obtenir la demande avec $this->getRequest()->getPost().
Si vous êtes dans une classe personnalisée, vous devez injecter la demande dans le constructeur.

<?php
namespace Namespace\Module\Something;
class ClassName 
{
    protected $request;
    public function __construct(
       \Magento\Framework\App\RequestInterface $request
        ....//rest of parameters here
    ) {
       $this->request = $request;
       ...//rest of constructor here
    }
    public function getPost()
    {
        return $this->request->getPostValue();//in Magento 2.*
    }
}

Qu'en est-il de $ _GET?
— Zhartaunik

3
De la même façon. Il suffit d’utiliser getParams au lieu de getPost
— Marius

Thx, ça marche. J'ai essayé en PHPstorm avec xDebug et regarder dans la fenêtre Watches. Mais j'ai un tableau vide.
— Zhartaunik

1
Ma classe \Magento\Framework\App\Request\Httpn'a pas de méthode getPost, êtes-vous sûr de cela?
— peedee

1
@ JeroenVermeulen-MageHost il n'y avait pas de norme MEQP2 il y a 2,5 ans lorsque j'ai écrit ceci.
— Marius

16

Bonjour, vous pouvez l’obtenir facilement dans les modèles, les blocs et les contrôleurs en utilisant:

$this->getRequest()->getPost() 

Ou ajoutez Magento\Framework\App\RequestInterfaceaux paramètres du constructeur dans vos propres classes:

<?php
namespace MyModuleNameSpace\MyModule\Block
use Magento\Framework\App\RequestInterface;

class MyClass
{
    /**
     * Request instance
     *
     * @var \Magento\Framework\App\RequestInterface
     */
    protected $request;

    /**
     * @param RequestInterface $request
     */
    public function __construct(RequestInterface $request)
    {
        $this->request = $request;
    }

    public function getMyPostParams()
    {
        $postData = $this->request->getPost();
    }
}

Mon \Magento\Framework\App\RequestInterfacen'a pas de méthode getPost(), êtes-vous sûr de cela?
— peedee

Avez-vous essayé le code? L'appel $this->getRequest()->getPost();retourne un Zend\Stdlib\Parametersobjet pour moi. Même en noyau, Magento utilise beaucoup d'appels comme celui-ci, avec un paramètre comme par exemple dans Magento\Sales\Controller\Adminhtml\Order\AddCommentil y a un appel sur la ligne 31:$data = $this->getRequest()->getPost('history');
— Jacques

@AmitBera J'ai besoin d'aide, existe-t-il un moyen d'appeler la Magento\Catalog\Model\Product\Option\ReadHandlerclasse de plug - in uniquement pour obtenir l'API de détails sur le produit?
— Kirti Nariya

2

Cela devrait fonctionner, juste le tester. Comparez et voyez ce qui manque.

<?php
namespace MyModuleNameSpace\MyModule\Block
use Magento\Framework\App\RequestInterface;

class MyClass extends \Magento\Framework\View\Element\Template
{
    /**
     * Request instance
     *
     * @var \Magento\Framework\App\RequestInterface
     */
    protected $request;

    /**
     * @param RequestInterface $request
     */
    public function __construct(
        RequestInterface $request,
        \Magento\Framework\View\Element\Template\Context $context,
        array $data = [])
    {
        $this->request = $request;
        parent::__construct($context, $data);
    }

    public function getMyPostParams()
    {
        $postData = $this->request->getPost();
    }
}

2
Dans le modèle, il n'est pas nécessaire de déclarer à nouveau la variable de demande. Nous avons déjà:$this->_request
— Khoa TruongDinh

1
private $params = ['id', 'name'];

public function execute()
{
    $this->getPostParams();
}

private function getPostParams()
{
    foreach ($this->params as $k) 
    {
        $this->params[$k] = $this->getRequest->getParam($k);
    }
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.