Magento2 cara mendapatkan Permintaan

36

Di Magento 2 cara menerima array permintaan? $_POSTdan $_GETjuga seperti yang kami lakukan di Magento 1:

Mage::app()->getRequest()->getPost()
zhartaunik
sumber
Bisakah Anda menentukan di kelas mana Anda menginginkan data POST dan GET.
Oscprofessionals

Jawaban:

73

Jika Anda mencoba ini dari pengontrol yang meluas Magento\Framework\App\Action\ActionAnda bisa mendapatkan permintaan $this->getRequest()->getPost().
Jika Anda berada di kelas khusus, Anda harus menyuntikkan permintaan di konstruktor.

<?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
sumber
bagaimana dengan $ _GET?
zhartaunik
3
Cara yang sama. Cukup gunakan getParams alih-alih getPost
Marius
Terima kasih. Saya mencoba di PHPstorm dengan xDebug dan mencari di jendela Watches. Tapi saya mendapat array kosong.
zhartaunik
1
Kelas saya \Magento\Framework\App\Request\Httptidak memiliki metode getPost, apakah Anda yakin tentang ini?
pipis
1
@ JeroenVermeulen-MageHost tidak ada standar MEQP2 2,5 tahun yang lalu ketika saya menulis ini.
Marius
16

Hai, Anda bisa mendapatkannya dengan mudah dalam model, blok, dan pengontrol dengan menggunakan:

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

Atau tambahkan Magento\Framework\App\RequestInterfaceke parameter konstruktor di kelas Anda sendiri:

<?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
sumber
Saya \Magento\Framework\App\RequestInterfacetidak memiliki metode getPost(), apakah Anda yakin tentang ini?
peedee
Apakah Anda mencoba kodenya? Memanggil $this->getRequest()->getPost();mengembalikan Zend\Stdlib\Parametersobjek untuk saya. Bahkan pada intinya, Magento menggunakan banyak panggilan seperti ini, dengan parameter seperti misalnya Magento\Sales\Controller\Adminhtml\Order\AddCommentada pada saluran 31 panggilan:$data = $this->getRequest()->getPost('history');
Jacques
@AmitBera Saya butuh bantuan, Apakah ada cara untuk memanggil Magento\Catalog\Model\Product\Option\ReadHandlerkelas plugin hanya dengan mendapatkan API detail produk?
Kirti Nariya
2

Ini harusnya berhasil, coba saja. Bandingkan dan lihat apa yang hilang.

<?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
sumber
2
Dalam templat, kami tidak perlu mendeklarasikan ulang variabel permintaan. Kami sudah:$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
sumber