さまざまなコントローラーを介してサプライヤー データ (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も合わせてどうするのがベストでしょうか?