Magento2 come ottenereRequest


36

In Magento 2 come ricevere array di richieste? $_POSTe $_GETanche come abbiamo fatto in Magento 1:

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

Puoi specificare in quale classe vuoi i dati POST e GET.
Oscprofessionals

Risposte:


73

Se lo stai provando da un controller che si estende Magento\Framework\App\Action\Actionpuoi ottenere la richiesta con $this->getRequest()->getPost().
Se sei in una classe personalizzata, devi inserire la richiesta nel costruttore.

<?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.*
    }
}

che ne dici di $ _GET?
Zhartaunik,

3
Stessa strada. Usa semplicemente getParams invece di getPost
Marius

Grazie, funziona. Ho provato in PHPstorm con xDebug e guardo nella finestra Orologi. Ma ho array vuoto.
Zhartaunik,

1
La mia classe \Magento\Framework\App\Request\Httpnon ha un metodo getPost, ne sei sicuro?
Peedee,

1
@ JeroenVermeulen-MageHost non c'era uno standard MEQP2 2,5 anni fa quando ho scritto questo.
Marius

16

Ciao, puoi ottenerlo facilmente in modelli, blocchi e controller usando:

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

Oppure aggiungi Magento\Framework\App\RequestInterfaceai parametri del costruttore nelle tue classi:

<?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();
    }
}

Il mio \Magento\Framework\App\RequestInterfacenon ha un metodo getPost(), ne sei sicuro?
Peedee,

Hai provato il codice? La chiamata $this->getRequest()->getPost();restituisce un Zend\Stdlib\Parametersoggetto per me. Anche nel core, Magento usa molte chiamate come questa, con un parametro come ad esempio nella Magento\Sales\Controller\Adminhtml\Order\AddCommentriga 31 c'è una chiamata:$data = $this->getRequest()->getPost('history');
Jacques

@AmitBera Ho bisogno di aiuto, c'è un modo per chiamare la Magento\Catalog\Model\Product\Option\ReadHandlerclasse plugin solo per ottenere l'API dei dettagli del prodotto?
Kirti Nariya il

2

Questo dovrebbe funzionare, basta testarlo. Confronta e vedi cosa manca.

<?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
Nel modello non è necessario dichiarare nuovamente la variabile di richiesta. Abbiamo già:$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);
    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.