Magento2 Wie bekomme ich eine Anfrage?

36

In Magento 2, wie Anforderungsarray empfangen? $_POSTund $_GETauch wie in Magento 1:

Mage::app()->getRequest()->getPost()
zhartaunik
quelle
Können Sie angeben, in welcher Klasse Sie POST- und GET-Daten wünschen.
Oscprofessionals

Antworten:

73

Wenn Sie dies von einem Controller versuchen, der erweitert wird Magento\Framework\App\Action\Action , können Sie die Anforderung mit abrufen $this->getRequest()->getPost().
Wenn Sie sich in einer benutzerdefinierten Klasse befinden, müssen Sie die Anforderung in den Konstruktor einfügen.

<?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
quelle
was ist mit $ _GET?
Zhartaunik
3
Gleicher Weg. Benutze einfach getParams anstelle von getPost
Marius
Danke, es funktioniert. Ich habe es in PHPstorm mit xDebug versucht und in Windows Watches gesucht. Aber ich habe ein leeres Array.
Zhartaunik
1
Meine Klasse \Magento\Framework\App\Request\Httphat keine Methode getPost. Sind Sie sich da sicher?
Peedee
1
@ JeroenVermeulen-MageHost Als ich das schrieb, gab es vor 2,5 Jahren keinen MEQP2-Standard.
Marius
16

Hallo, Sie können es leicht in Modellen, Blöcken und Steuerungen erhalten, indem Sie verwenden:

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

Oder ergänzen Sie Magento\Framework\App\RequestInterfacedie Konstruktorparameter in Ihren eigenen Klassen:

<?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
quelle
Meine \Magento\Framework\App\RequestInterfacehat keine Methode getPost(), bist du dir da sicher?
Peedee
Hast du den Code ausprobiert? Das Aufrufen $this->getRequest()->getPost();gibt ein Zend\Stdlib\ParametersObjekt für mich zurück. Selbst im Kern verwendet Magento viele Aufrufe wie diese, mit einem Parameter wie zum Beispiel in Magento\Sales\Controller\Adminhtml\Order\AddCommentZeile 31 gibt es einen Aufruf:$data = $this->getRequest()->getPost('history');
Jacques
@AmitBera Ich brauche Hilfe, gibt es eine Möglichkeit, Magento\Catalog\Model\Product\Option\ReadHandlerPlugin-Klasse aufzurufen , um nur in Produktdetails API zu bekommen?
Kirti Nariya
2

Dies sollte funktionieren, testen Sie es einfach. Vergleichen Sie und sehen Sie, was fehlt.

<?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
quelle
2
In der Vorlage muss die Anforderungsvariable nicht erneut deklariert werden. Wir haben bereits:$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
quelle