2012-04-17 66 views
0

我在symfony 1.4項目中創建任務,我需要更新一些表格。在自定義任務中使用原則

我已經寫了:

<?php 
class dataImportTask extends sfBaseTask 
{ 
    public function configure() 
    { 
    $this->namespace = 'data'; 
    $this->name  = 'import'; 

    $this->addOptions(array(
     new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'environment', 'dev'), 
    )); 
    } 

    public function execute($arguments = array(), $options = array()) 
    { 
    $databaseManager = new sfDatabaseManager(sfProjectConfiguration::getApplicationConfiguration('frontend', $options['env'], true)); 
    $connection = $databaseManager->getDatabase()->getConnection(); 
    } 
} 

(下面的例子中發現on symfony-project.org

但是,當我執行任務時,symfony說: 「Database "default" does not exist.」。爲什麼這個任務不使用databases.yml中定義的dbname?

回答

4

這是使用任務時的常見問題。你有兩個選擇:

  • 命名在database.yml中
  • 您的教義連接default保持相同的名字在database.yml中,並在每個任務添加一個選項,以獲取正確的數據庫名稱。

對於選項#2,你必須用你的數據庫名稱(在你database.yml的一個定義)增加一個選項,然後更改的方式getDatabase作品:

在database.yml中:

all: 
    doctrine: 
    class: sfDoctrineDatabase 

基於學說名稱上方,添加選項中你的任務:

<?php 
class dataImportTask extends sfBaseTask 
{ 
    public function configure() 
    { 
    $this->namespace = 'data'; 
    $this->name  = 'import'; 

    $this->addOptions(array(
     new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'environment', 'dev'), 
     new sfCommandOption('connection', null, sfCommandOption::PARAMETER_REQUIRED, 'The connection name', 'doctrine'), 
    )); 
    } 

    public function execute($arguments = array(), $options = array()) 
    { 
    $databaseManager = new sfDatabaseManager(sfProjectConfiguration::getApplicationConfiguration('frontend', $options['env'], true)); 
    $connection = $databaseManager->getDatabase($options['connection'])->getConnection(); 
    } 
} 
+0

非常快,巨大的答案, 謝謝 ! – Manu 2012-04-17 15:44:43