0

BlobDataForm が埋め込まれたフォーム PhotoForm があります。

blbo データを正常に保存できますが、問題は blob_data テーブルにあります。

image_width と image_height の 2 つのフィールドがあります。

ブロブを保存するときに、これらの詳細も保存したいと思います。

doSave(); をオーバーライドしました。

  protected function doSave($con = null)
  {
    if (null === $con)
    {
      $con = $this->getConnection();
    }

    $this->updateObject();
    $blobData = new BlobData();
    $this->saveEmbeddedForms($con);
    $this->getObject()->setBlobData($this->getEmbeddedForm('blob_data')->getObject());
    $this->getObject()->save($con);
  }

saveEmbeddedForms() もオーバーライドする必要がありますか?

ありがとう

編集:

わかりましたので、オーバーライドする必要があるようです:

プロセス値()

画像の幅と高さの属性を取得するのに問題があります。

誰も私がそれを行う方法を知っていますか?

ありがとう

4

2 に答える 2

1

この2つの情報をblob_dataフィールドから取得できる場合は、オブジェクトを保存する直前に呼び出されるBlobDataクラスのpreSaveメソッドをオーバーライドできます。

public function preSave($event)
{ 
     //get the information from the blob_data
     $this->image_width = ... ;
     $this->image_height = ... ;

}
于 2011-02-24T14:01:10.270 に答える
0

そうです、結局のところ、saveEmbeddedForms をオーバーライドする必要がありました。

  public function saveEmbeddedForms($con = null, $forms = null)
  {
    if (null === $con)
    {
      $con = $this->getConnection();
    }

    if (null === $forms)
    {
       $photos = $this->getValue('blob_data');
       $forms = $this->embeddedForms;
       foreach ($this->embeddedForms['blob_data'] as $name => $form)
       {
            if (!isset($photos[$name]))
            {
              unset($forms['blob_data'][$name]);
            }
        }
    }

    foreach ($forms as $form)
    {
      if ($form instanceof sfFormObject)
      {
        $form->saveEmbeddedForms($con);
        $blobData = $form->getObject()->getBlobData();
         $imageStream = stream_get_contents($blobData);
         $image = imagecreatefromstring($imageStream);
         $form->getObject()->setImageWidth(imagesx($image));
         $form->getObject()->setImageHeight(imagesy($image));
         $form->getObject()->setFileExtension('jpg');
         //return parent::preSave($con);
        $form->getObject()->save($con);
      }
      else
      {
        $this->saveEmbeddedForms($con, $form->getEmbeddedForms());
      }
    }
}

これは私にとってはうまくいくようでした

ありがとう

于 2011-02-25T09:15:44.790 に答える