我在一个项目中使用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中的值,以防图像成功通过验证器测试?
答案 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();
}
}