控制器使用ATK4导入不同格式的供应商数据

时间:2012-08-01 12:34:14

标签: php oop model controller atk4

我想从概念上理解如何设置控制器/模型,以防我想通过不同的控制器导入供应商数据(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一致的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

2

这取决于您的应用程序中的许多因素,但我认为第二种选择是最合适的。用法是:

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

您还可以在模型中创建方法:

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

然后您只需拨打$model->import();

即可