Как настроить задачи в Symfony 1.4? - PullRequest
1 голос
/ 30 ноября 2011

Я использовал symfony 1.4 и Doctrine для создания своего рода мини-CMS. Он использует базу данных для хранения различных страниц и категорий.

Теперь я добавил еще одно соединение к databases.yml, чтобы получить информацию о клиенте.

Я хотел бы указать symfony, что эта база данных только для чтения и что она никогда не должна писать в нее.

На данный момент я создал пользователя во 2-й базе данных, который может только читать, похоже, он делает свое дело, хотя команды, подобные doctrine:build --all, все еще пытаются писать в нем.

РЕДАКТИРОВАТЬ: Благодаря ответу Паскаля я использую события, чтобы сказать доктрине использовать только один дБ для задачи sfDoctrineDropDbTask.

  public function setup()
  {
    (...)
    $this->dispatcher->connect('command.filter_options', array($this, 'filterCommandOptions'));
  }

  public function filterCommandOptions(sfEvent $event, $options)
  {

    if ('sfDoctrineDropDbTask' === get_class($event->getSubject()))
      $options = array('base1');
    elseif ('sfDoctrineBuildDbTask' === get_class($event->getSubject()))
      $options = array('base1');

    elseif ('sfDoctrineDataDumpTask' === get_class($event->getSubject()))
      $options = array('base1');
    //elseif ('sfDoctrineInsertSqlTask' === get_class($event->getSubject()))
      //$options = array('base1');
    elseif ('sfDoctrineCreateModelTables' === get_class($event->getSubject()))
      $options = array('base1');


    return $options;
  }

Этот трюк не работает для других задач:

  • doctrine:data-dump все еще читает обе базы данных,
  • доктрина все еще пытается написать во время doctrine:build --all задачи
  • sfDoctrineInsertSqlTask жалуется, что я дал слишком много вариантов.

1 Ответ

1 голос
/ 30 ноября 2011

вы можете принудительно указать имя доктрины базы данных: build --all может быть сброшено с помощью событий.

проверьте это: https://gist.github.com/582306

...