symfony - 保存blob数据图像大小

时间:2011-02-24 13:34:58

标签: symfony-1.4 symfony-forms

我有一个表单PhotoForm,它有一个ebbed的BlobDataForm。

我可以使用blob_data表保存blbo数据,我的问题来了。

我有2个字段,image_width和image_height。

当blob保存时,我也想保存这些细节。

我已经覆盖了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()?

由于

编辑:

好的,所以我似乎需要覆盖:

  

processValues()

我在获取图像宽度和高度属性方面遇到了麻烦。

有谁知道我该怎么做?

由于

2 个答案:

答案 0 :(得分:1)

如果您可以从blob_data字段获取这两个信息,则可以覆盖BlobData类的preSave方法,该方法在保存对象之前调用:

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

}

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

这似乎对我有用

由于