Magento2 cómo obtener Petición

36

En Magento 2, ¿cómo recibir la matriz de solicitudes? $_POSTy $_GETtambién como hicimos en Magento 1:

Mage::app()->getRequest()->getPost()
zhartaunik
fuente
¿Puede especificar en qué clase desea los datos POST y GET?
Oscprofessionals

Respuestas:

73

Si está intentando esto desde un controlador que se extiende Magento\Framework\App\Action\Action, puede obtener la solicitud con $this->getRequest()->getPost().
Si está en una clase personalizada, debe inyectar la solicitud en el constructor.

<?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.*
    }
}
Marius
fuente
¿Qué hay de $ _GET?
zhartaunik
3
Mismo camino. Simplemente use getParams en lugar de getPost
Marius
Gracias, funciona. Intenté en PHPstorm con xDebug y miro en la ventana Relojes. Pero tengo una matriz vacía.
zhartaunik
1
Mi clase \Magento\Framework\App\Request\Httpno tiene un método getPost, ¿estás seguro de esto?
peedee
1
@ JeroenVermeulen-MageHost no existía el estándar MEQP2 hace 2.5 años cuando escribí esto.
Marius
16

Hola, puedes obtenerlo fácilmente en modelos, bloques y controladores usando:

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

O agregue Magento\Framework\App\RequestInterfacea los parámetros del constructor en sus propias clases:

<?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();
    }
}
Amit Bera
fuente
Mi \Magento\Framework\App\RequestInterfaceno tiene un método getPost(), ¿estás seguro de esto?
peedee
¿Probaste el código? Llamar me $this->getRequest()->getPost();devuelve un Zend\Stdlib\Parametersobjeto. Incluso en el núcleo, Magento usa muchas llamadas como esta, con un parámetro como, por ejemplo, Magento\Sales\Controller\Adminhtml\Order\AddCommenthay una llamada en la línea 31:$data = $this->getRequest()->getPost('history');
Jacques
@AmitBera Necesito ayuda, ¿hay alguna forma de llamar a la Magento\Catalog\Model\Product\Option\ReadHandlerclase de complemento solo para obtener la API de detalles del producto?
Kirti Nariya
2

Esto debería funcionar, solo pruébalo. Compara y mira lo que falta.

<?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();
    }
}
Daniel
fuente
2
En la plantilla, no necesitamos volver a declarar la variable de solicitud. Ya hemos:$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);
    }
}
Ydrus
fuente