Symfony 1.4保存所有项目'从一个动作开始


Symfony 1.4 save all items' froms with one action

我想在Symfony 1.4中用一个动作创建200多个对象的缩略图。问题是缩略图生成发生在保存表单时。

class AuthorForm extends BaseAuthorForm
{
  public function configure()
  {
    /* some configs */
  }
  public function save($con = null)
  {      
    /* create thmbnail from original picture */ 
  }
}

我怎么能写一个(批处理)动作,能够一次保存它们,而不是去每个项目的后端和保存?

请注意,$author->save();当然,这行不通。

谢谢!

您必须获取对象,遍历它们,创建表单并保存。如下所示

$authors = Doctrine_Core::getTable('Author')->findAll();
foreach($authors as $author){
    $form = new AuthorForm($author);
    $form->save();
}

如果您在托管计划(而不是您的开发机器)上运行它,可能会有内存问题。获得缩略图的更好方法是使用像sfImageTransformExtraPlugin (http://www.symfony-project.org/plugins/sfImageTransformExtraPlugin)这样的插件,它可以在需要时生成缓存的缩略图。您甚至不需要经历生成缩略图的麻烦。并且仍然可以很容易地为同一张照片创建多个缩略图版本。

如果您仍然需要使用这种方式,请在循环期间执行一些取消设置的操作,如下所示:

$authors = Doctrine_Core::getTable('Author')->findAll();
foreach($authors as $author){
    $form = new AuthorForm($author);
    $form->save();
    unset($form, $author);
}