php - 使用 ATK4 导入不同格式的供应商数据的 Controller

标签 php oop model controller atk4

我喜欢从概念上理解如何设置 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/

相关文章:

具有多个初始化方法的 Python 子类?

ruby - 了解 ruby​​ 中的方法调用

Javascript 性能 this.与 varname 相比。用于访问属性

javascript - AngularJS 的面向对象方法

php - jquery对文本进行颜色编码

php - 如何使用 FOSRest 和 Symfony 3.0 正确执行 REST API POST 调用

PHP 分页在排序后不起作用

php - 在删除时更新相关模型属性

python - Django:如何从与用户相关的子查询集中获取不同的父列表?

javascript - 使用主过滤器 "with multi"和辅助过滤器 "only one"过滤列表结果