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.