2011-08-25 79 views
0

我在Symfony的1.4创建的任务载荷在一些CSV文件导入表 - 很简单 - >添加自定义的类/方法

protected function execute($arguments = array(), $options = array()) 
{ 
    $databaseManager = new sfDatabaseManager($this->configuration); 
    $connection = $databaseManager->getDatabase($options['connection'])->getConnection(); 

    ...... 

    $query = "LOAD DATA INFILE '" . $cdrfile . "' 
     INTO TABLE .... 

    etc 

    $connection->execute($query); 
} 

但我想重用的代码别的地方本节 - 所以我创建了一个新的PHP类,并创建了一个名为loadDataFromCSV的新静态方法。

我把所有的代码到该方法然后叫class::loadDataFromCSV ...

这给了我一些问题 - 首先在方法$this关键字不作为类它不是一个对象有效(即不实例化) - 所以我可以实例化该类,然后调用方法class->loadDataFromCSV - 下一个问题是在第一行上的$this->configuration - 是否必须将配置传递给该方法才能使其工作?

什么是最简单的方法来创建一个简单的方法来运行一段简单的代码 - 而不必传递大量变量。

回答

2

简答:使用DI容器。

长答案:您基本上会问如何设置对象依赖关系,因为您的类取决于配置对象。有两种方法可以做到这一点。硬编码依赖于你的课堂。例如Registry::getInstance()->get('config');并使用依赖注入。只要您可以传递任何配置实例,依赖注入就是更好的解决方案。现有对象,新对象,用于单元测试的模拟对象或其他配置实现。有两种类型的依赖注入。通过构造函数注入依赖(如new Object(new Dependency()))或通过制定者。

$o = new Object(); 
$o->setDependency($dependency); 

如果你的对象有很多依赖的代码可能成为左右逢源的小不可读。该解决方案是使用依赖注入容器自动注入所有依赖于你你的客户端代码仍然是一个简单的行:DIContainer::create('object');创建方法创建类的实例,注入所有的依赖和返回对象

+1

我会看看依赖注入 - 谢谢。 – ManseUK

0

对于使用你的方法,你应该静态方法:

  1. 替换自己的所有this->关键字::
  2. 将所有配置设置移动到一个文件中,并将它们加载到例如将实现模式Singleton的Config类中。调用看起来像Config :: getInstance() - > getSection('your_section');

关于DB初始化:

  1. 创建2种设置/获取
  2. 创建引导文件中的DB对象的静态方法Registry类。
  3. 使用$ connection = Registry :: get('db') - > getConnection();