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()
zhartaunik
la source
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.*
    }
}
Marius
la source
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();
    }
}
Amit Bera
la source
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();
    }
}
Daniel
la source
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);
    }
}
Ydrus
la source