Magento2 nasıl yapılır?


36

Magento 2'de istek dizisi nasıl alınır? $_POSTve $_GETMagento 1’de yaptığımız gibi:

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

Hangi sınıfta POST ve GET verisi istediğinizi belirleyebilirsiniz.
Profesyoneller

Yanıtlar:


72

Bunu genişleten bir denetleyiciden deniyorsanız Magento\Framework\App\Action\Actionisteği alabilirsiniz $this->getRequest()->getPost().
Özel bir sınıftaysanız, isteği yapıcıya enjekte etmeniz gerekir.

<?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'den ne haber?
zhartaunik

3
Aynı şekilde. Sadece getPost yerine getParams kullanın
Marius

THX, işe yarıyor. PHPStorm'da xDebug ile denedim ve Saatler penceresine baktım. Fakat boş dizilim var.
zhartaunik

1
Sınıfımın \Magento\Framework\App\Request\Httpbir metodu yok getPost, bundan emin misin?
Peedee,

1
@ JeroenVermeulen-MageHost, bunu 2.5 yıl önce yazdığım MEQP2 standardı yoktu.
Marius

16

Merhaba, model, blok ve kontrol cihazlarında aşağıdakileri kullanarak kolayca alabilirsiniz:

$this->getRequest()->getPost() 

Veya Magento\Framework\App\RequestInterfacekendi sınıflarınızdaki yapıcı parametrelerine ekleyin :

<?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();
    }
}

Benim \Magento\Framework\App\RequestInterfaceyöntemim yok getPost(), bundan emin misin?
Peedee,

Kodu denedin mi? Aramak benim için $this->getRequest()->getPost();bir Zend\Stdlib\Parametersnesne döndürür . Çekirdekte bile, Magento böyle çağrıları kullanır, örneğin, Magento\Sales\Controller\Adminhtml\Order\AddComment31 numaralı hatta olduğu gibi bir parametre ile :$data = $this->getRequest()->getPost('history');
Jacques

@AmitBera Yardıma ihtiyacım var, Magento\Catalog\Model\Product\Option\ReadHandlerEklenti sınıfını çağırmak için sadece ürün detaylarını almak için API var mı?
Kirti Nariya

2

Bu işe yarayacak, sadece test et. Neyin eksik olduğunu karşılaştırın ve karşılaştırın.

<?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
Şablonda, istek değişkenini yeniden bildirmemize gerek yoktur. Biz zaten var:$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);
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.