Magento2如何获取请求


36

在Magento 2中如何接收请求数组?$_POST并且$_GET也为我们做了Magento的1:

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

您可以指定要在哪个类中发布和获取数据。
Oscprofessionals

Answers:


73

如果您从扩展控制器尝试此操作,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尝试过,并在Watches中查看。但是我得到了空数组。
zhartaunik

1
我的课\Magento\Framework\App\Request\Http没有方法getPost,您确定吗?
2016年

1
@ JeroenVermeulen-MageHost 2.5年前,当我写这篇文章时,还没有MEQP2标准。
马吕斯

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(),您确定吗?
撒尿人

您是否尝试过代码?调用会为我$this->getRequest()->getPost();返回一个Zend\Stdlib\Parameters对象。即使在核心中,Magento也会使用大量这样的调用,例如在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's

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);
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.