0

我在一个项目中使用 Symfony 1.4 和 Doctrine,用户可以将图像作为头像上传。我不想将文件名存储在 db 中,而是一个布尔值。那是我相关的 schema.yml 部分:

nyUserProfile:
...
has_avatar:
  type:    boolean
  notnull: true
  default: false

我覆盖了 sfValidatedFile 保存方法只是为了保存一些缩略图而不调用 parent::save 函数,因为我不关心原始文件:

    // Creamos los thumbnails
    $config = sfConfig::get('app_images_avatars');
    $original = new sfImage($this->getTempName());

    foreach($config['sizes'] as $thumbnail_name => $thumbnail_info){
        $thumb = $original->copy();
        $thumb->setQuality($thumbnail_info['quality']);
        $thumb->thumbnail($thumbnail_info['width'],$thumbnail_info['height'],$thumbnail_info['method'],'#000000');
        $thumb->saveAs($this->getPath() . DIRECTORY_SEPARATOR . $file . '_' .  $thumbnail_name . $thumbnail_info['extension'],$thumbnail_info['mime']);
    }

这可以很好地保存拇指,但布尔值 false 存储在字段 has_avatar 的 db 中,我想这是因为根本没有调用 parent::save 方法,但你知道,我不想存储原始文件,只是从中制作缩略图。

是否有一种方法可以手动设置存储在 db 中的值,以防图像成功通过验证器测试?

4

2 回答 2

0

如果您的表单是 Doctrine 表单,您可以使用updateObject表单本身的功能设置 has_avatar 属性:

public function updateObject ($values = null)
{
    $object = parent::updateObject($values);
    $object->setHasAvatar(true);
            return $object;
}
于 2012-05-31T21:23:32.777 回答
-1

验证表单后,您可以在操作中执行此操作,只需更新数据库中的字段。

// Deal with the request
if ($request->isMethod('post'))
{
  $this->form->bind(/* user submitted data */);
  if ($this->form->isValid())
  {
    $object = $this->form->save();

    // your form is valid so your image is valid too
    $object->setHasAvatar(true);
    $object->save();
  }
}
于 2012-05-31T15:12:47.743 回答