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.