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();
  }
}

symfony-project.orgにある例に従ってください)

しかし、私がタスクを実行すると、symfonyは次のように言います:" Database "default" does not exist."。タスクがで定義されたdbnameを使用しないのはなぜdatabases.ymlですか?

4

1 に答える 1

4

これは、タスクを操作するときによくある問題です。2つのオプションがあります:

  • defaultdatabase.ymlで教義のつながりに名前を付けました
  • database.ymlに同じ名前を保持し、すべてのタスクにオプションを追加して、正しいデータベース名を取得します。

database.ymlオプション#2の場合、データベースの名前(で定義されているもの)を使用してオプションを追加してから、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();
  }
}
于 2012-04-17T15:28:41.750 に答える