0

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

4

1 回答 1

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 补丁,该代码创建将旧用户添加到新数据库所需的所有查询。完成后,将补丁应用到新数据库。

于 2011-06-15T13:26:09.150 回答