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 के बारे में क्या?
— झारतुनिक ३०'१५

3
उसी तरह। बस getPost के बजाय getParams का उपयोग
— मेरियस

Thx, यह काम करता है। मैं xDebug के साथ PHPstorm में कोशिश की और खिड़की घड़ियाँ में देखो। लेकिन मुझे खाली सरणी मिली।
— झर्रतुनिक

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\Sales\Controller\Adminhtml\Order\AddCommentकि लाइन 31 पर एक कॉल है:$data = $this->getRequest()->getPost('history');
— जैक

@AmitBera मुझे मदद चाहिए, क्या Magento\Catalog\Model\Product\Option\ReadHandlerउत्पाद विवरण एपीआई प्राप्त करने के लिए केवल प्लगइन वर्ग को कॉल करने का एक तरीका है ?
— कीर्ति नारिया

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
— खोआ 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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.