我喜欢从概念上理解如何设置 Controller /模型,以防我想通过不同的 Controller 导入供应商数据(csv/xml/soap/..)。为了更好地集中注意力,我简化了我的案例。
在 ATK4 中我有 Model_Supplier。主要字段有:名称、类型。类型可以是 csv1、csv2、csv3、xml1、xml2、soap1。一些供应商正在使用相同类型。
我喜欢加载模型并执行 ->import()。但是,每种类型的 import() 应该不同。
我考虑了以下可能性: [1]加载model,setController,hook方法到model然后使用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();
那么 Controller 中的 import() 应该引用 $this->owner 作为模型
[3] 另一种选择是使用 Model_Supplier_Csv1 扩展 Model_Supplier,然后在此处使用 import() 。 但是,我首先需要加载 Model_Supplier 来识别类型,然后卸载并再次加载 Model_Supplier_$type
[4] 或者添加模型,然后添加 Controller ,然后将模型实例设置到 Controller 并执行controller->import()
$m=$this->add('Model_Supplier)->load(1);
$c=$this->add('Controller_'.$m['type']);
$c->setModel($m);
$c->import();
[5]也许是另一个我没有想到的解决方案。
符合 ATK4 的最佳方法是什么?
最佳答案
2.
这取决于您应用程序中的许多因素,但我认为第二种选择最合适。用法是:
$model->setController($m['type'])->import();
您还可以在模型中创建一个方法:
function import(){
return $this->setController($m['type'])->import();
}
然后你可以简单地调用$model->import();
关于php - 使用 ATK4 导入不同格式的供应商数据的 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11759325/