在symfony中备份sfguard用户

时间:2011-06-15 09:58:33

标签: symfony-1.4 sfguard login-system

我们在Symfony 1.4和ORM Propel中创建了我们的项目。我们有两个项目,一个是旧的,另一个是新的。我们的旧项目于今年早些时候推出,其中存在许多问题,我们尝试创建一个新项目(具有新的域名和更好的功能)。 但我们有一些用户使用旧网站提供登录信息(即SfGuard用户)。 我们希望旧网站的用户可以使用相同的登录信息登录我们的新网站。 我们尝试将sfGuard用户信息(从旧站点)转储到Fixtures中并将其加载到我们的新站点。但它没有用。 无论如何我们可以做到。

1 个答案:

答案 0 :(得分:1)

我没有太多信息可以提供更准确的信息(你的意思是什么转储不起作用?你使用的是什么数据库?)答案但是根据你提供的数据,我的第一个方法是创建一个任务使用两个数据库(旧数据库和新数据库)的新项目,横跨用户在新数据库中创建新用户,并从旧数据库中重新获取信息。   为此,在database.yml中添加两个数据库,创建一个old_sfGuard_schema.yml并指定要使用的数据库,并定义sfGuard类(类名应该类似于sfOldGuardUser,sfOldGuardCredential等,以便不你需要的当前sfGuardClasses崩溃。最后你的代码应该是这样的:

public function execute([..])
{
  foreach(sfOldGuardUsersPeer::doSelect(new Criteria()) as $old_user)
  {
   $new_user = new sfGuardUser();
   $new_user->setUsername($old_user->getUsername());
   [...]
   foreach($old_user->getCredentials() as $old_user_credential)
   {
     [....]
   }
   $new_user->save();
  }

}

注意这是一个伪代码,它不会在symfony上运行,但你的代码最终会看起来像这样。

还可以通过将关于用户的数据库信息转储到csv并创建由某些代码生成的某种patch.sql来创建SQL补丁,该代码创建将旧用户添加到新数据库所需的所有查询。一旦完成,请将补丁应用到新数据库。