我想从概念上了解如何设置控制器/模型,以防我想通过不同的控制器导入供应商数据(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 中,需要通过 init() 像这样添加方法 import():
$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] 另一种选择是使用 Model_Supplier_Csv1 扩展 Model_Supplier,然后在此处使用 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 的最佳方法?