如何使用Symfony 1.4手动设置以Doctrine形式存储在数据库中的值?

时间:2012-05-31 14:21:19

标签: symfony1 doctrine symfony-1.4

我在一个项目中使用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']);
    }

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

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

2 个答案:

答案 0 :(得分:0)

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

public function updateObject ($values = null)
{
    $object = parent::updateObject($values);
    $object->setHasAvatar(true);
            return $object;
}

答案 1 :(得分:-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();
  }
}