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

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

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

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

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);
    }
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.