Magento2 बाकी एपीआई त्रुटि 'वर्ग मौजूद नहीं है'


12

मैंने एलन के ब्लॉग पर आधारित एक परीक्षण Magento 2.0.2 REST वेब सेवा बनाई है: http://alankent.me/2015/07/24/creating-a-new-rest-web-service-in-magento-2/

मैं कस्टम वेब सेवा को कॉल करने और निम्नलिखित त्रुटि प्राप्त करने के लिए पोस्टमैन का उपयोग कर रहा हूं:

"message": "Class  does not exist",
  "code": -1,
  "trace": "#0 P:\\wwwroot\\Magento202_com_loc\\Web\\vendor\\magento\\framework\\Webapi\\ServiceInputProcessor.php(128): ReflectionClass->__construct('')\n#1 P:\\wwwroot\\Magento202_com_loc\\Web\\vendor\\magento\\framework\\Webapi\\ServiceInputProcessor.php(262): Magento\\Framework\\Webapi\\ServiceInputProcessor->_createFromArray(NULL, '30')\n#2 P:\\wwwroot\\Magento202_com_loc\\Web\\vendor\\magento\\framework\\Webapi\\ServiceInputProcessor.php(99): Magento\\Framework\\Webapi\\ServiceInputProcessor->convertValue('30', NULL)\n#3 P:\\wwwroot\\Magento202_com_loc\\Web\\vendor\\magento\\module-webapi\\Controller\\Rest.php(262): Magento\\Framework\\Webapi\\ServiceInputProcessor->process('Test\\\\Calculator...', 'add', Array)\n#4 P:\\wwwroot\\Magento202_com_loc\\Web\\vendor\\magento\\module-webapi\\Controller\\Rest.php(160): Magento\\Webapi\\Controller\\Rest->processApiRequest()\n#5 P:\\wwwroot\\Magento202_com_loc\\Web\\var\\generation\\Magento\\Webapi\\Controller\\Rest\\Interceptor.php(24): Magento\\Webapi\\Controller\\Rest->dispatch(Object(Magento\\Framework\\App\\Request\\Http))\n#6 P:\\wwwroot\\Magento202_com_loc\\Web\\vendor\\magento\\framework\\App\\Http.php(115): Magento\\Webapi\\Controller\\Rest\\Interceptor->dispatch(Object(Magento\\Framework\\App\\Request\\Http))\n#7 P:\\wwwroot\\Magento202_com_loc\\Web\\vendor\\magento\\framework\\App\\Bootstrap.php(258): Magento\\Framework\\App\\Http->launch()\n#8 P:\\wwwroot\\Magento202_com_loc\\Web\\index.php(39): Magento\\Framework\\App\\Bootstrap->run(Object(Magento\\Framework\\App\\Http))\n#9 {main}"

मैं सफलतापूर्वक Magento के आउट-ऑफ-द-बॉक्स REST वेब सेवाओं को कॉल कर सकता हूं।

एप्लिकेशन / कोड / टेस्ट / कैलक्यूलेटर / registration.php

<?php

\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Test_Calculator',
__DIR__
);

एप्लिकेशन / कोड / टेस्ट / कैलक्यूलेटर / etc / module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Test_Calculator" setup_version="1.0.0"/>
</config>

एप्लिकेशन / कोड / टेस्ट / कैलक्यूलेटर / 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/calculator/add/:num1/:num2" method="GET">
        <service class="Test\Calculator\Api\CalculatorInterface" method="add"/>
        <resources>
            <resource ref="anonymous"/>
        </resources>
    </route>
</routes>

एप्लिकेशन / कोड / टेस्ट / कैलक्यूलेटर / etc / di.xml

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Test\Calculator\Api\CalculatorInterface" type="Test\Calculator\Model\Calculator" />
</config>

एप्लिकेशन / कोड / टेस्ट / कैलक्यूलेटर / एपीआई / CalculatorInterface.php

<?php

namespace Test\Calculator\Api;

interface CalculatorInterface
{
    public function add($num1, $num2);
}

एप्लिकेशन / कोड / टेस्ट / कैलक्यूलेटर / मॉडल / Calculator.php

<?php

namespace Test\Calculator\Model;

use Test\Calculator\Api\CalculatorInterface;

class Calculator implements CalculatorInterface
{
    public function add($num1, $num2) {
        return $num1 + $num2;
    }
}

REST url जो त्रुटि लौटाता है:

http://local.magento202.com:81/index.php/rest/V1/calculator/add/30/70

जवाबों:


27

यहाँ वर्णित के अनुसार ऐप / कोड / टेस्ट / कैलकुलेटर / एपी / कैलकुलेटरइंटरफेस.php में एक डॉकलॉक आवश्यक है: http://devdocs.magento.com/guides/v2.0/coding-standards/docblock-standard-general.html

<?php

namespace Test\Calculator\Api;

interface CalculatorInterface
{
    /**
     * Add two numbers.
     *
     * @param int $num1
     * @param int $num2
     * @return int
     */
    public function add($num1, $num2);
}

1
मुझे वही त्रुटि मिल रही थी, क्योंकि मैंने "@प्रेम" के बजाय @params का उपयोग किया था। Magento 2 कोड मानकों में बहुत सख्त है: P
अल्ताफ हुसैन

अगर मुझे रिटर्न जसन सरणी चाहिए तो मुझे रिटर्न वैल्यू के रूप में क्या लिखना चाहिए
भूपेंद्र जडेजा

[at] रिटर्न ऐरे @ भूपेंद्र जडेजा
यिंग स्टाइल

@AltafHussain मुझे पता है कि इसे 2 साल हो गए हैं, लेकिन इसका कोडिंग मानकों से कोई लेना-देना नहीं है, सत्यापन करने के लिए प्रतिबिंब का उपयोग करता है, इसलिए इसे "@param" नहीं मिल सकता है यह बस बिंदु रिक्त तोड़ देगा। यह ऐसा है जैसे आप $ $ सेट करते हैं और बाद में इसे $ b के रूप में उपयोग करना चाहते हैं, लेकिन php मानक बहुत सख्त हैं
DarkMukke

आप, सर, मेरे हीरो हैं। धन्यवाद। मैंने कभी नहीं सोचा होगा कि कोई फर्क पड़ेगा लेकिन इससे मेरी समस्या ठीक हो गई।
18

4

मेरे मामले में समस्या यह थी कि मैंने इंटरफ़ेस में "उपयोग" का उपयोग किया था। Magento DocBlockReflection वह संभाल नहीं सका और पूर्ण नामस्थान के बिना इंटरफ़ेस की खोज कर रहा था। तो उदाहरण के लिए bellow कोड में:

use My\Namespace\ExampleObjectInterface
interface ExampleObjectRepositoryInterface
{
/**
 * xyz
 * @param int $id
 * @return ExampleObjectInterface
 * @throws \Magento\Framework\Exception\NoSuchEntityException
 * @throws \Magento\Framework\Exception\LocalizedException
 */
public function getById($id);
}

मुझे "उपयोग" को हटाने की आवश्यकता है:

interface ExampleObjectRepositoryInterface
{
/**
 * xyz
 * @param int $id
 * @return \My\Namespace\ExampleObjectInterface
 * @throws \Magento\Framework\Exception\NoSuchEntityException
 * @throws \Magento\Framework\Exception\LocalizedException
 */
public function getById($id);
}

omg, आपने मेरी जान बचाई है। मैं इस पर घंटों बहस कर रहा था। क्यों Magento फ्रेमवर्क का उपयोग करने के लिए बहुत मुश्किल है :(
एलेक्स

1

सुनिश्चित करें कि नीचे कमांड सफलतापूर्वक निष्पादित की गई है। किसी भी एपीआई कॉल को बाधित या हिट न करें। निष्पादन के बाद आपकी समस्या हल हो जाएगी। मेरे लिए काम किया।

php bin/magento setup:di:compile
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.