我需要在magento 2中创建一个REST API,以商店ID为参数,并返回特定商店ID的所有评论。
如果传递其他参数(例如客户ID,产品ID),则应执行过滤。
答案 0 :(得分:2)
这是一个非常广泛的主题需要解释。我正在逐步解释程序。
步骤1.在Magento 2核心文件夹中,转到应用程序/代码。 创建供应商文件夹(如ECMAG)和子文件夹(如MyReviews)。 在MyReviews文件夹中,创建三个文件夹Api等并进行建模。
步骤2。在etc文件夹中,使用以下代码创建di.xml文件。
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
<preference for="ECMAG\MyReviews\Api\MyReviewInterface"
type="ECMAG\MyReviews\Model\MyReviewClass" />
</config>
接下来,在同一文件夹中创建module.xml文件。
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
<module name="ECMAG_MyReviews" setup_version="1.0.0"/>
</config>
接下来,在同一文件夹中创建webapi.xml文件。
<?xml version="1.0"?>
<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../app/code/Magento/Webapi/etc/webapi.xsd">
<route url="/V1/showreview/allreviews/:storeId" method="GET">
<service class="ECMAG\MyReviews\Api\MyReviewInterface" method="getAllReviews"/>
<resources>
<resource ref="anonymous"/>
</resources>
</route>
</routes>
第3步。接下来在Api文件夹中创建界面。
<?php
namespace ECMAG\MyReviews\Api;
interface MyReviewInterface
{
/**
* GET review by its ID
*
* @api
* @param string $storeId
* @return array
* @throws \Magento\Framework\Exception\NoSuchEntityException
*/
public function getAllReviews($storeId);
}
第4步。接下来在“模型”文件夹中创建类。
<?php
namespace ECMAG\MyReviews\Model;
use ECMAG\MyReviews\Api\MyReviewInterface;
use Magento\Framework\App\Bootstrap;
class MyReviewClass implements MyReviewInterface{
protected $request;
public function __construct(\Magento\Framework\App\Request\Http $request) {
$this->request = $request;
}
/**
* GET review by its ID
*
* @api
* @param string $storeId
* @return array
* @throws \Magento\Framework\Exception\NoSuchEntityException
*/
public function getAllReviews($storeId){
$bootstrap = Bootstrap::create(BP, $_SERVER);
$obj = $bootstrap->getObjectManager();
$state = $obj->get('Magento\Framework\App\State');
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$storeManager = $objectManager->get('Magento\Store\Model\StoreManagerInterface');
$currentStoreId = $storeManager->getStore()->getId();
$rating = $objectManager->get("Magento\Review\Model\ResourceModel\Review\CollectionFactory");
//Apply filter for store id and status='Approved'
$collection = $rating->create()->addStoreFilter($storeId
)->addStatusFilter(\Magento\Review\Model\Review::STATUS_APPROVED);
//Get All parameters from request
$allParameters=$this->request->getParams();
//Check parameter from_Date present or not
if(array_key_exists("fromDate",$allParameters)){
$collection=$collection->addFieldToFilter('created_at', ['gteq' => $allParameters['fromDate']]);
}
//Check parameter to_Date present or not
if(array_key_exists("toDate",$allParameters)){
$collection=$collection->addFieldToFilter('created_at', ['lteq' => $allParameters['toDate']]);
}
//Check parameter title present or not
if(array_key_exists("title",$allParameters)){
$title=$allParameters['title'];
$collection=$collection->addFieldToFilter('title', ['like' => '%'.$title.'%']);
}
//Check parameter text present or not
if(array_key_exists("text",$allParameters)){
$collection=$collection->addFieldToFilter('detail', ['like' => '%'.$allParameters['text'].'%']);
}
//Check parameter customer id present or not
if(array_key_exists("customerId",$allParameters)){
$collection=$collection->addFieldToFilter('customer_id', ['eq' => $allParameters['customerId']]);
}
//Check parameter product id present or not
if(array_key_exists("productId",$allParameters)){
$collection=$collection->addFieldToFilter('entity_pk_value', ['eq' => $allParameters['productId']]);
}
//Check paramter for maximum no. of product per page
if(array_key_exists("pageSize",$allParameters)){
$collection->setPageSize($allParameters['pageSize']);
}
//Check paramter for current page no.
if(array_key_exists("page",$allParameters)){
$collection->setCurPage($allParameters['page']);
}
$result=$collection->getData();
return $result;
}
}
在上述方法中,首先在“商店ID”上应用过滤器,然后在URL中传递可选参数,例如customer_id,product_id。 特殊检查参数名称。
第5步。最后,在MyReviews文件夹中创建registration.php。
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'ECMAG_MyReviews',
__DIR__
);
并调用系统升级命令-> php bin / magento setup:upgrade
在上述所有过程调用网址之后均为-` http://hostname/magento/index.php/rest/V1/showreview/allreviews/1'
当在url中传递参数时,例如- `http://hostname/magento/index.php/rest/V1/showreview/allreviews/1?productId=1'
希望它会对您有所帮助。