Php Zend框架与防胖控制器 避免脂肪控制器

Php Zend框架与防胖控制器 避免脂肪控制器,php,zend-framework,controller,datamapper,Php,Zend Framework,Controller,Datamapper,所以我在使用Zend框架,我有一个问题涉及到用我的一个动作来阻止脂肪控制器。基本上,我正在将CSV文件规范化到我的数据库中 这意味着我必须获得提要,然后使用我的模型。 feed抓取只是为了展示它是如何工作的,但它现在是一个动作助手 我正在使用Zend框架的数据映射器模式。我讨厌我在控制器中这样做。所有这些setProperty()->setProperty()->setProperty()看起来难以置信的混乱,我觉得我在错误的地方做了吗?如果只创建某种服务层,传递整个$feed,然后在该类中实例

所以我在使用Zend框架,我有一个问题涉及到用我的一个动作来阻止脂肪控制器。基本上,我正在将CSV文件规范化到我的数据库中

这意味着我必须获得提要,然后使用我的模型。 feed抓取只是为了展示它是如何工作的,但它现在是一个动作助手

我正在使用Zend框架的数据映射器模式。我讨厌我在控制器中这样做。所有这些setProperty()->setProperty()->setProperty()看起来难以置信的混乱,我觉得我在错误的地方做了吗?如果只创建某种服务层,传递整个$feed,然后在该类中实例化我的模型和映射器,这会是一个更好的选择吗

另外,我需要规范化,这意味着我应该使用事务,但我不确定应该从哪里开始我的事务。因为我现在做事情的方式,我唯一能考虑的地方是我的控制器。哇!那将是一个可怕的地方

如何从控制器中获取模型行为和操作? ImportController.php


服务层可能是我的选择。因此,您将创建一个如下所示的服务类:

class Your_Service_Import
{
    public function importFromCsv($csv)
    {
        // etc.
    }
}
$feed = $this->csv_to_array(trim($response->getBody()));

$service = new Your_Service_Import();
$service->importFromCsv($feed);
然后将csv_to_数组调用之后的所有控制器方法代码移动到该方法中,使控制器方法的结尾看起来像这样:

class Your_Service_Import
{
    public function importFromCsv($csv)
    {
        // etc.
    }
}
$feed = $this->csv_to_array(trim($response->getBody()));

$service = new Your_Service_Import();
$service->importFromCsv($feed);
这使得测试导入代码更容易(因为它在一个独立类中),也更容易在应用程序的其他部分中重用。

我要比@Tim Fountain更进一步

  • 创建一个服务或域帮助器,该服务或域帮助器接受开始、结束(并可以配置用户名、密码和url)并以数组形式返回csv列表
  • 创建一个映射已知维度数组(csv)并将其映射到数据库的服务
  • 然后,您的控制器将

    $start = $this->getRequest()->getParam('start');
    $end = $this->getRequest()->getParam('end');
    $dataService = new Your_Service_Get();
    $data = $dataService->get($start, $end);
    $mapService = new Your_Service_Map();
    $mapService->map($data);
    

    Justin,当您插入时,您不能使用单个数据映射器类,对吗?你需要几个?