Magento2 getRequestの方法


36

Magento 2では、リクエスト配列を受信する方法は?$_POSTまた$_GET、Magento 1で行ったように:

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

POSTおよびGETデータが必要なクラスを指定できますか。
Oscprofessionals

回答:


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
同じ方法。getPostの代わりにgetParamsを使用する
Marius

THX、それは動作します。xstormを使用してPHPstormで試し、ウィンドウウォッチを確認しました。しかし、空の配列を取得しました。
zhartaunik

1
私のクラスに\Magento\Framework\App\Request\HttpはメソッドgetPostがありません、これについて確かですか?
ピーディー

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');
ジャック

@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
コアトルディンディン

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.