Як отриматиRequest


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?
жартаунік

3
Точно так же. Просто використовуйте getParams замість getPost
Marius

Thx, це працює. Я спробував у PHPstorm з xDebug і заглянути у вікно Годинники. Але я отримав порожній масив.
жартаунік

1
У моєму класі \Magento\Framework\App\Request\Httpнемає методу getPost, ви впевнені в цьому?
піде

1
@ JeroenVermeulen-MageHost не було стандарту MEQP2 2,5 роки тому, коли я писав це.
Маріус

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 використовує безліч подібних дзвінків, з таким параметром, як, наприклад, Magento\Sales\Controller\Adminhtml\Order\AddCommentє на лінії 31 дзвінок:$data = $this->getRequest()->getPost('history');
Жак

@AmitBera Мені потрібна допомога. Чи є спосіб зателефонувати Magento\Catalog\Model\Product\Option\ReadHandlerдо класу плагінів, щоб отримати лише API інформації про продукт?
Кірті Нарія

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);
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.