Magento2 como obterRequest

36

No Magento 2, como receber uma matriz de pedidos? $_POSTe $_GETtambém como fizemos no Magento 1:

Mage::app()->getRequest()->getPost()
zhartaunik
fonte
Você pode especificar em qual classe deseja os dados POST e GET.
Oscprofessionals 30/03

Respostas:

73

Se você está tentando fazer isso a partir de um controlador que se estende, Magento\Framework\App\Action\Actionpode obter a solicitação com $this->getRequest()->getPost().
Se você estiver em uma classe personalizada, precisará injetar a solicitação no construtor.

<?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
fonte
e quanto a $ _GET?
Zhartaunik 30/05
3
Da mesma maneira. Basta usar getParams em vez de getPost
Marius
Thx, funciona. Eu tentei no PHPstorm com xDebug e olhei na janela Relógios. Mas eu tenho matriz vazia.
Zhartaunik
11
Minha classe \Magento\Framework\App\Request\Httpnão possui um método getPost, você tem certeza disso?
Peedee
11
@ JeroenVermeulen-MageHost não havia um padrão MEQP2 há 2,5 anos atrás quando escrevi isso.
Marius
16

Olá, você pode obtê-lo facilmente em modelos, blocos e controladores usando:

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

Ou adicione Magento\Framework\App\RequestInterfaceaos parâmetros do construtor em suas próprias 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
fonte
Meu \Magento\Framework\App\RequestInterfacenão tem um método getPost(), você tem certeza disso?
Peedee
Você tentou o código? Chamar $this->getRequest()->getPost();retorna um Zend\Stdlib\Parametersobjeto para mim. Mesmo no núcleo, o Magento usa muitas chamadas como essa, com um parâmetro como, por exemplo Magento\Sales\Controller\Adminhtml\Order\AddComment, na linha 31 uma chamada:$data = $this->getRequest()->getPost('history');
Jacques
@AmitBera Preciso de ajuda. Existe uma maneira de chamar a Magento\Catalog\Model\Product\Option\ReadHandlerclasse de plug-ins apenas na API de obter detalhes do produto?
Kirti Nariya 6/11
2

Isso deve funcionar, basta testá-lo. Compare e veja o que está faltando.

<?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
fonte
2
No modelo, não precisamos declarar novamente a variável de solicitação. Já temos:$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
fonte