1

Zend Framework 2を使用してWebショップを構築しています。このWebショップは、サプライヤーが提供するAPIで動作します。

エアインテーク、エアサスペンションパーツ&キット、ボディキット、エキゾースト、グリル、ステアリングホイールなどのカスタムカー製品を販売したいと考えています。

サプライヤーはGET、次の関数を備えたAPI(パラメーターとコンマ区切りの応答を使用した呼び出しのみ)を提供しています

  • 製品

    • カテゴリで検索;
    • 車のブランドで検索->モデル->タイプ;
    • idで検索;
    • 名前で検索;
  • 注文

    • 追加;
    • 意見;
    • 消去。
  • 請求書

    • 意見;
  • 株式は現在の値を取得します

  • 配信ビューの現在のステータスを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/サプライヤー名/モジュール.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に特化して、(および場合によってはサポートクラスに)格納されます。SteeringWheelMapperSteeringWheel

EventManager次に、ベンダーのWebサービスからのデータをキャッシュするイベントとリスナーを設定できるように、マッパーにを追加します。

于 2013-03-08T07:58:27.343 に答える