【问题标题】:How to manually set the value to store in database in a Doctrine form using Symfony 1.4?如何使用 Symfony 1.4 手动设置要以 Doctrine 形式存储在数据库中的值?
【发布时间】:2012-05-31 14:21:19
【问题描述】:

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

【问题讨论】:

    标签: symfony1 doctrine symfony-1.4


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      // 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();
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2015-02-23
        • 2018-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多