我正在使用Zend Framework 2构建一个网上商店,这个网上商店将使用供应商提供的API。
我们想销售定制汽车产品,如进气口,空气悬架零件和套件,车身套件,排气装置,格栅,方向盘等。
供应商提供API(只有GET
调用params和逗号分隔的响应),具有以下功能
产品
订单
发票
股票获取当前值
投放按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';
供应商/ SupplierName / SRC / SupplierName / 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服务进行通信的模块。
有人能告诉我在哪里寻找信息/样本来构建这样的模块吗? 或者任何人都可以举例说明我应该如何构建这个模块?
非常感谢,如果事情不清楚,请告诉我,以便我解释一下!
答案 0 :(得分:2)
我接近这个的方法是为每种产品类型创建一个实体类。这些是简单的PHP类,包含表示产品的属性和相关方法。 e.g。
namespace SupplierName\Entity;
class SteeringWheel
{
protected $diameter;
public function getDiameter()
{
return $this->diameter;
}
public function setDiameter($diameter)
{
$this->diameter = $diameter;
return $this;
}
}
要获取这些实体,我会使用与外部对话的mapper类。 e.g。
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服务的数据。