Magento2 REST এপিআই ত্রুটি 'শ্রেণীর অস্তিত্ব নেই'


12

আমি অ্যালানের ব্লগের উপর ভিত্তি করে একটি পরীক্ষা ম্যাজেন্টো ২.০.২ আরএসটি ওয়েব সার্ভিস তৈরি করেছি: 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}"

আমি সফলভাবে ম্যাজেন্টোকে বাক্সের বাইরে থাকা 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>

অ্যাপ্লিকেশন / কোড / পরীক্ষা / ক্যালকুলেটর / API / 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 ইউআরএল যা ত্রুটি প্রদান করে:

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

উত্তর:


27

এখানে বর্ণিত অ্যাপ / কোড / টেস্ট / ক্যালকুলেটর / এপি / ক্যালকুলেটরআইন্টারফেস.এফপিতে একটি ডকব্লক প্রয়োজন: http://devdocs.magento.com/guides/v2.0/coding-standards/doc block-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
আমি একই ত্রুটিটি পেয়েছিলাম, কারণ আমি "@param" এর পরিবর্তে @ @ @ @ @ @ @ ব্যবহার করেছি। ম্যাজেন্টো 2 কোড স্ট্যান্ডার্ডে খুব কঠোর: পি
আলতাফ হুসেন

আমি জেএসন অ্যারে চাইলে রিটার্ন ভ্যালু হিসাবে কী লিখব
ভূপেন্দ্র জাদেজা

[এ] ফেরত অ্যারে @ ভূপেন্দ্র যাদেজা
ইং স্টাইল

@ অ্যালতাফহুসাইন আমি জানি এটি 2 বছর কেটে গেছে, তবে কোডিং মানগুলির সাথে এর কোনও সম্পর্ক নেই, যাচাইকরণের জন্য প্রতিচ্ছবি ব্যবহার করে, সুতরাং এটি "@ পরিমাপ" খুঁজে পাবে না এটি কেবল পয়েন্ট ফাঁকা হয়ে যাবে। এটি আপনার মতো একটি সেট হয়েছে এবং পরে এটি $ বি হিসাবে ব্যবহার করতে চান তবে পিএইচপি মানগুলি অত্যন্ত কঠোর
ডার্কমুককে

আপনি স্যার, আমার নায়ক. ধন্যবাদ. আমি কখনই ভাবিনি যে বিষয়টি মেটে তবে এটি আমার সমস্যার সমাধান করে দেয়।
সীন ব্রিডেন

4

আমার ক্ষেত্রে সমস্যাটি ছিল আমি ইন্টারফেসে "ব্যবহার" ক্লজুল ব্যবহার করি। ম্যাজেন্টো ডকব্লকআরফ্ল্যাকশন সেটি পরিচালনা করতে পারে নি এবং পুরো নামস্থান ছাড়াই ইন্টারফেসের জন্য অনুসন্ধান করছে। সুতরাং উদাহরণস্বরূপ বেলো কোডে:

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

ওম, আপনি আমার জীবন বাঁচিয়েছেন। আমি কয়েক ঘন্টা ধরে এটি ডিবাগ করছি। কেন মাজেন্টো কাঠামো ব্যবহার করা এত কঠিন :(
অ্যালেক্স

1

নিশ্চিত করুন যে নীচের কমান্ডটি সফলভাবে কার্যকর হয়েছে। কোনও এপিআই কল বাধা বা হিট করবেন না। মৃত্যুদন্ড কার্যকর হওয়ার পরে আপনার সমস্যা সমাধান হবে। আমার জন্য কাজ করেছেন।

php bin/magento setup:di:compile
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.