Magento2 làm thế nào để có được


36

Trong Magento 2 làm thế nào để nhận được mảng yêu cầu? $_POST$_GETcũng như chúng ta đã làm trong Magento 1:

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

Bạn có thể chỉ định lớp nào bạn muốn dữ liệu POST và GET.
Giải Oscar

Câu trả lời:


73

Nếu bạn đang thử điều này từ một bộ điều khiển mở rộng, Magento\Framework\App\Action\Actionbạn có thể nhận được yêu cầu $this->getRequest()->getPost().
Nếu bạn đang ở trong một lớp tùy chỉnh, bạn cần phải đưa yêu cầu vào hàm tạo.

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

Còn $ _GET thì sao?
zhartaunik 30/05/2015

3
Cùng một cách. Chỉ cần sử dụng getParams thay vì getPost
Marius

Thx, nó hoạt động. Tôi đã thử trong PHPstorm với xDebug và tìm trong cửa sổ Đồng hồ. Nhưng tôi có mảng trống.
zhartaunik 30/05/2015

1
Lớp \Magento\Framework\App\Request\Httptôi không có phương pháp getPost, bạn có chắc về điều này không?
peedee

1
@ JeroenVermeulen-Magehost không có tiêu chuẩn MEQP2 2,5 năm trước khi tôi viết bài này.
Marius

16

Xin chào, bạn có thể lấy nó dễ dàng trong các mô hình, khối và bộ điều khiển bằng cách sử dụng:

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

Hoặc thêm Magento\Framework\App\RequestInterfacevào các tham số hàm tạo trong các lớp của riêng bạn:

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

Tôi \Magento\Framework\App\RequestInterfacekhông có một phương pháp getPost(), bạn có chắc chắn về điều này?
peedee

Bạn đã thử mã chưa? Gọi $this->getRequest()->getPost();trả lại một Zend\Stdlib\Parametersđối tượng cho tôi. Ngay cả trong cốt lõi, Magento sử dụng cuộc gọi nhiều như thế này, với một tham số như ví dụ trong Magento\Sales\Controller\Adminhtml\Order\AddCommentđó là trên đường dây 31 cuộc gọi:$data = $this->getRequest()->getPost('history');
Jacques

@AmitBera Tôi cần trợ giúp, Có cách nào để gọi Magento\Catalog\Model\Product\Option\ReadHandlerlớp plugin chỉ để nhận API chi tiết sản phẩm không?
Kirti Nariya

2

Điều này nên làm việc, chỉ cần kiểm tra nó. So sánh và xem những gì còn thiếu.

<?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
Trong mẫu, chúng ta không cần khai báo lại biến yêu cầu. Chúng tôi đã có:$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);
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.