Magento2 getRequest 방법


36

Magento 2에서 요청 배열을받는 방법? $_POST$_GET젠토 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 2016 년

3
같은 길. getPost
Marius

Thx, 작동합니다. xDebug를 사용하여 PHPstorm에서 시도하고 창 Watches를 봅니다. 그러나 빈 배열이 있습니다.
zhartaunik

1
내 수업 \Magento\Framework\App\Request\Http에는 메소드가 없습니다. getPost확실합니까?
오줌

1
@ JeroenVermeulen-MageHost 2.5 년 전에이 글을 쓸 때 MEQP2 표준이 없었습니다.
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()확실합니까?
오줌

코드를 사용해 보셨습니까? 호출 $this->getRequest()->getPost();하면 Zend\Stdlib\Parameters객체가 반환 됩니다. 코어에서도 Magento는 이와 같은 많은 호출을 사용합니다. 예를 들어 Magento\Sales\Controller\Adminhtml\Order\AddComment31 번 줄에는 다음 과 같은 매개 변수 가 있습니다.$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.