1

我正在使用 Zend Framework 2 构建一个网上商店,这个网上商店将使用供应商提供的 API。

我们想销售定制汽车产品,如进气口、空气悬架零件和套件、车身套件、排气管、格栅、方向盘等。

供应商提供具有以下功能的 API(仅GET使用参数和逗号分隔的响应调用)

  • 产品

    • 按类别搜索;
    • 按汽车品牌搜索-->车型-->类型;
    • 按 ID 搜索;
    • 按名称搜索;
  • 订单

    • 添加;
    • 看法;
    • 删除。
  • 发票

    • 看法;
  • Stock获取当前值

  • 交付按 orderId 查看当前状态。

我已经构建了一个名为SupplierName的模块。我创建了一个 Module.php 文件:

<?php
/**
* This file is placed here for compatibility with ZendFramework 2's ModuleManager.
* It allows usage of this module even without composer.
* The original Module.php is in 'src/SupplierName/Module.php' in order to
* respect the PSR-0 convention
*/
require_once __DIR__ . '/src/SupplierName/Module.php';

供应商/供应商名称/src/供应商名称/Module.php

<?php

namespace SupplierName;

class Module
{
    public function getConfig()
    {
        return include __DIR__ . '/../../config/module.config.php';
    }

    public function getAutoloaderConfig()
    {
        return array(
            'Zend\Loader\StandardAutoloader' => array(
                'namespaces' => array(
                    __NAMESPACE__ => __DIR__,
                ),
            ),
        );
    }
}

在主模块的 IndexController 的 indexAction 中,我使用下面的代码来加载我的模块。

$supplierNameClient = $this->getServiceLocator()->get('SupplierName\Client');

现在我的问题来了……这是我第一次构建一个仅用于从外部资源加载数据并将其传递到我自己的系统的模块。问题是我没有想出一个好的模块结构......我认为每种产品类型(烤架、排气装置、转向轮等)、订单、发票等都应该有一个类。

我一直在搜索并查看http://modules.zendframework.com/page/2?query=api。有一个包含应该用于与 Web 服务通信的模块的列表。

谁能告诉我在哪里寻找信息/样本来构建这样的模块?或者谁能​​给我一个例子,我应该如何构建这个模块?

非常感谢,如果有不清楚的地方,请告诉我,以便我解释!

4

1 回答 1

2

我的方法是为每种产品类型创建一个实体类。这些是简单的 PHP 类,具有代表产品的属性和相关方法。例如

namespace SupplierName\Entity;

class SteeringWheel
{
    protected $diameter;

    public function getDiameter()
    {
        return $this->diameter;
    }

    public function setDiameter($diameter)
    {
        $this->diameter = $diameter;
        return $this;
    }

}

要获取这些实体,我将使用与外部对话的映射器类。例如

namespace SupplierName\Mapper;

class SteeringWheelMapper extends AbstractWebServiceMapper
{
    public function fetchbyDiameter($diameter) {
        // construct search query and then call up a parent
        // class method that calls the vendor's webservice
        // that presumably returns an array of data.
        //
        // Within this method, convert that array of data into a
        // set of SteeringWheel objects and return.
    }
}

与外部资源对话的通用代码存储在AbstractVendorWebServiceMapper(可能还有支持类)中,专门SteeringWheelMapper处理方向盘和创建SteeringWheel实体。

然后我可能会向映射器添加一个EventManager,以便我可以设置事件和侦听器来缓存来自供应商 Web 服务的数据。

于 2013-03-08T07:58:27.343 回答