0

ユーザーが画像をアバターとしてアップロードできるプロジェクトで、Doctrine で Symfony 1.4 を使用しています。ファイル名をdbに保存したくありませんが、ブール値を保存します。それは私の関連する schema.yml セクションです:

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

元のファイルは気にしないので、parent::save 関数を呼び出さずにいくつかのサムネイルを保存するためだけに sfValidatedFile 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']);
    }

それは親指をうまく保存しますが、フィールドhas_avatarでブール値のfalse値がdbに保存されます。これは、parent::saveメソッドがまったく呼び出されないためだと思いますが、元のファイルを保存したくないので、サムネイルを作成するだけです。

イメージがバリデータ テストに合格した場合に備えて、db に格納されている値を手動で設定する方法はありますか?

4

2 に答える 2

0

updateObjectフォームがDoctrineフォームの場合、フォーム自体の関数を使用して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 に答える