Post-Parameter in Magento 2 Controller empfangen


9

Ich rufe eine HTTP-Anforderung für den Controller auf, erhalte Get-Parameter, kann jedoch keine Post-Parameter in Controller empfangen.

Grundsätzlich möchte ich Magento 2-APIs aufrufen und eine angepasste Antwort an die Anwendung senden. Dazu habe ich eine erstellt simple module, die eine API und eine angepasste Antwort aufruft und eine Antwort an die Anwendung sendet.

Ich kann jedoch keine Post-Parameter von der Anfrage abrufen.

Hier sind einige meiner Dateien, die eine Vorstellung vom Problem geben können:

etc / webapi.xml

<?xml version="1.0"?>
<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Webapi:etc/webapi.xsd">
    <route url="/V1/api/token" method="POST">
        <service class="Spaarg\Api\Api\apiInterface" method="token"/>
        <resources>
            <resource ref="anonymous"/>
        </resources>
    </route>
</routes>

Index.php

<?php
/**
 *
 * Copyright © 2015 Spaargcommerce. All rights reserved.
 */
namespace Spaarg\Api\Controller\Token;

class Index extends \Magento\Framework\App\Action\Action
{

    /**
     * @var \Magento\Framework\App\Cache\TypeListInterface
     */
    protected $_cacheTypeList;

    /**
     * @var \Magento\Framework\App\Cache\StateInterface
     */
    protected $_cacheState;

    /**
     * @var \Magento\Framework\App\Cache\Frontend\Pool
     */
    protected $_cacheFrontendPool;

    /**
     * @var \Magento\Framework\View\Result\PageFactory
     */
    protected $resultPageFactory;

    /**
     * @param Action\Context $context
     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
     * @param \Magento\Framework\App\Cache\StateInterface $cacheState
     * @param \Magento\Framework\App\Cache\Frontend\Pool $cacheFrontendPool
     * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
     */
    public function __construct(
       \Magento\Framework\App\Action\Context $context,
        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
        \Magento\Framework\App\Cache\StateInterface $cacheState,
        \Magento\Framework\App\Cache\Frontend\Pool $cacheFrontendPool,
        \Magento\Framework\View\Result\PageFactory $resultPageFactory
    ) {
        parent::__construct($context);
        $this->_cacheTypeList = $cacheTypeList;
        $this->_cacheState = $cacheState;
        $this->_cacheFrontendPool = $cacheFrontendPool;
        $this->resultPageFactory = $resultPageFactory;
    }

    /**
     * Flush cache storage
     *
     */
    public function execute()
    {
        //$this->resultPage = $this->resultPageFactory->create();  
        //return $this->resultPage;

        $_objectManager = \Magento\Framework\App\ObjectManager::getInstance(); //instance of\Magento\Framework\App\ObjectManager
        $storeManager = $_objectManager->get('Magento\Store\Model\StoreManagerInterface'); 
        $currentStore = $storeManager->getStore();
        $baseUrl = $currentStore->getBaseUrl();

        $post = $this->getRequest()->getPost();

        echo "<pre>";
        print_r($post);
        exit;

    }
}

Es wird toll sein, wenn jemand helfen kann.


Bitte überprüfen Sie Ur Formular Tag mit Methode Post$postParam = $this->context->getRequest()->getParam('<param>');
Ankit Shah

@Anand, könnten Sie helfen, wie Sie Ihren benutzerdefinierten API-Endpunkt implementiert und Post-Parameter mithilfe des Controllers abgerufen haben? Vielen Dank im Voraus
fmsthird

Antworten:


21

Um Post-Daten im Controller abzurufen, müssen Sie in Ihrer Ausführungsfunktion Folgendes verwenden.

public function execute()
{
    $post = $this->getRequest()->getPostValue();

    echo "<pre>";
    print_r($post);
    exit;

}

Wenn ich eine benutzerdefinierte Methode zum Abrufen von Post-Parametern verwenden möchte, wie wird dies dann möglich sein?
Pratik Mehta

1
Ich möchte dieser Antwort 100 positive Stimmen geben
Murtuza Zabuawala

@ Salma können Sie mir auf diesem magento.stackexchange.com/questions/296960/…
Nagaraju K

3

Wenn Sie Post-Daten vom Controller erhalten möchten,

$post = $this->getRequest()->getPostValue();

Hier dein vollständiger Code,

Außerdem müssen Sie das Storemanager-Objekt in der __construct () -Funktion Ihrer PHP-Datei deklarieren, anstatt den direkten Objektmanager zu verwenden.

Ich habe Ihren Code wie folgt aktualisiert:

class Index extends \Magento\Framework\App\Action\Action
{

    /**
     * @var \Magento\Framework\App\Cache\TypeListInterface
     */
    protected $_cacheTypeList;

    /**
     * @var \Magento\Framework\App\Cache\StateInterface
     */
    protected $_cacheState;

    /**
     * @var \Magento\Framework\App\Cache\Frontend\Pool
     */
    protected $_cacheFrontendPool;

    /**
     * @var \Magento\Framework\View\Result\PageFactory
     */
    protected $resultPageFactory;

    /**
     * @param Action\Context $context
     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
     * @param \Magento\Framework\App\Cache\StateInterface $cacheState
     * @param \Magento\Framework\App\Cache\Frontend\Pool $cacheFrontendPool
     * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
     */
    public function __construct(
       \Magento\Framework\App\Action\Context $context,
        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
        \Magento\Framework\App\Cache\StateInterface $cacheState,
        \Magento\Framework\App\Cache\Frontend\Pool $cacheFrontendPool,
        \Magento\Framework\View\Result\PageFactory $resultPageFactory,
        \Magento\Store\Model\StoreManagerInterface $storeManager
    ) {
        parent::__construct($context);
        $this->_cacheTypeList = $cacheTypeList;
        $this->_cacheState = $cacheState;
        $this->_cacheFrontendPool = $cacheFrontendPool;
        $this->resultPageFactory = $resultPageFactory;
        $this->storeManager = $storeManager;
    }

    /**
     * Flush cache storage
     *
     */
    public function execute()
    {
        $currentStore = $this->storeManager->getStore();
        $baseUrl = $currentStore->getBaseUrl();

        $post = $this->getRequest()->getPostValue();

        echo "<pre>";
        print_r($post);
        exit;

    }
}

Ist es möglich, Post-Parameter zu $post = $this->getRequest()->getPostValue();
deaktivieren

@rakesh können Sie mir auf diesem magento.stackexchange.com/questions/296960/…
Nagaraju K
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.