Magento2 Wie bekomme ich eine Anfrage?


36

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

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

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

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

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

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);
    }
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.