Magento2 วิธีการได้รับการร้องขอ


36

ใน Magento 2 จะรับคำขออาร์เรย์ได้อย่างไร $_POSTและ$_GETเช่นเดียวกับที่เราทำใน Magento 1:

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

คุณสามารถระบุในคลาสที่คุณต้องการข้อมูล POST และ GET ได้ไหม
Oscprofessionals

คำตอบ:


72

ถ้าคุณกำลังพยายามควบคุมนี้จากที่ขยายคุณจะได้รับการร้องขอด้วยMagento\Framework\App\Action\Action ถ้าคุณอยู่ในคลาสที่กำหนดเองคุณต้องฉีดคำขอในตัวสร้าง $this->getRequest()->getPost()

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

แล้ว $ _GET ล่ะ
zhartaunik

3
วิธีการเดียวกัน. เพียงใช้ getParams แทน getPost
Marius

ขอบคุณมันใช้งานได้ ฉันลองใช้ PHPstorm กับ xDebug และดูในหน้าต่าง แต่ฉันได้อาร์เรย์ที่ว่างเปล่า
zhartaunik

1
ชั้นเรียนของฉัน\Magento\Framework\App\Request\Httpไม่มีวิธีgetPostคุณแน่ใจหรือไม่
peedee

1
@ JeroenVermeulen-MageHost ไม่มีมาตรฐาน MEQP2 2.5 ปีที่ผ่านมาเมื่อฉันเขียนสิ่งนี้
Marius

16

สวัสดีคุณสามารถหาได้ง่ายในรุ่นบล็อกและคอนโทรลเลอร์โดยใช้:

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

หรือเพิ่มMagento\Framework\App\RequestInterfaceพารามิเตอร์คอนสตรัคเตอร์ในคลาสของคุณเอง:

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

ฉัน\Magento\Framework\App\RequestInterfaceไม่มีวิธีgetPost()คุณแน่ใจเกี่ยวกับเรื่องนี้?
peedee

คุณลองรหัสแล้วหรือยัง การโทร$this->getRequest()->getPost();จะส่งคืนZend\Stdlib\Parametersวัตถุสำหรับฉัน แม้ในแกนหลักวีโอไอพีใช้การโทรจำนวนมากเช่นนี้โดยมีพารามิเตอร์เช่นในMagento\Sales\Controller\Adminhtml\Order\AddCommentบรรทัดที่ 31 มีการโทร:$data = $this->getRequest()->getPost('history');
Jacques

@AmitBera ฉันต้องการความช่วยเหลือมีวิธีเรียกMagento\Catalog\Model\Product\Option\ReadHandlerคลาสปลั๊กอินเฉพาะเพื่อรับ API รายละเอียดผลิตภัณฑ์หรือไม่
Kirti Nariya

2

ควรใช้งานได้แค่ทดสอบ เปรียบเทียบและดูว่ามีอะไรขาดหายไป

<?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
ในเทมเพลตเราไม่จำเป็นต้องประกาศตัวแปรคำขออีกครั้ง เรามีอยู่แล้ว:$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);
    }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.