2

さまざまなコントローラーを介してサプライヤー データ (csv/xml/soap/..) をインポートする場合に備えて、コントローラー/モデルをセットアップする方法を概念的に理解するのが好きです。より集中できるようにケースを単純化しました。

ATK4 には Model_Supplier があります。主なフィールドは次のとおりです。名前、タイプ。タイプは csv1、csv2、csv3、xml1、xml2、soap1 です。一部のサプライヤーは同じタイプを使用しています。

モデルをロードして ->import() を実行するのが好きです。ただし、 import() はタイプごとに異なる必要があります。

私は次の可能性について考えました: [1]モデルをロードし、setController、モデルにメソッドをフックしてから、model->import()を使用します

$m=$this->add('Model_Supplier)->load(1);
$m->setController($m['type']);
$m->import();

次に、Controller_Csv1 で、メソッド import() を init() 経由で次のように追加する必要があります。

$this->owner->addMethod('import',array($this,'import'));

[2] モデルをロードし、setController を実行し、controller->import() を実行します。

$m=$this->add('Model_Supplier)->load(1);
$c=$m->setController($m['type']);
$c->import();

次に、コントローラーの import() は $this->owner をモデルとして参照する必要があります

[3] もう 1 つのオプションは、Model_Supplier を Model_Supplier_Csv1 で拡張し、ここに import() を含めることです。ただし、最初に Model_Supplier をロードしてタイプを識別し、次に Model_Supplier_$type をアンロードして再度ロードする必要があります

[4] または、モデルを追加してからコントローラーを追加し、モデル インスタンスをコントローラーに設定して、controller->import() を実行します。

$m=$this->add('Model_Supplier)->load(1);
$c=$this->add('Controller_'.$m['type']);
$c->setModel($m);
$c->import();

[5] 私が考えもしなかった別の解決策かもしれません。

ATK4も合わせてどうするのがベストでしょうか?

4

1 に答える 1

2

2.

これはアプリケーションの多くの要因によって異なりますが、2 番目のオプションが最も適していると思います。使用法は次のとおりです。

$model->setController($m['type'])->import();

モデルにメソッドを作成することもできます。

function import(){
    return $this->setController($m['type'])->import();
}

その後、単に呼び出すことができます$model->import();

于 2012-08-02T09:56:25.647 に答える