我想从概念上理解如何设置控制器/模型,以防我想通过不同的控制器导入供应商数据(csv / xml / soap / ..)。我简化了我的案例以便更好地关注。
在ATK4中我有Model_Supplier。主要字段是:名称,类型。类型可以是csv1,csv2,csv3,xml1,xml2,soap1。一些供应商使用相同的类型。
我想加载模型并执行 - > import()。但是每种类型的import()应该不同。
我想到了以下可能性: [1] load model,setController,hook方法进行建模,然后使用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] load model,setController和do 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一致的最佳方法是什么?
答案 0 :(得分:2)
2
这取决于您的应用程序中的许多因素,但我认为第二种选择是最合适的。用法是:
$model->setController($m['type'])->import();
您还可以在模型中创建方法:
function import(){
return $this->setController($m['type'])->import();
}
然后您只需拨打$model->import();