2012-04-17 3 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.". Почему задача не использует имя dbname, указанное в databases.yml?

ответ

4

Это обычная проблема при работе с задачей. У вас есть 2 вариант:

  • назвал ваше соединение учения default в database.yml
  • сохранить такое же имя в 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

Смежные вопросы