Symfony - сохранение размеров изображения данных BLOB-объектов - PullRequest
0 голосов
/ 24 февраля 2011

У меня есть форма PhotoForm, в которой есть добавленная BlobDataForm.

Я могу нормально сохранить данные blbo, у меня проблема с таблицей blob_data.

У меня есть 2 поля, image_width и image_height.

Я хотел бы также сохранить эти данные при сохранении большого двоичного объекта.

Я переопределил 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 ()?

Спасибо

EDIT:

Хорошо, похоже, мне нужно переопределить:

processValues ​​() * 1 021 *

У меня просто проблемы с получением атрибутов ширины и высоты изображений.

Кто-нибудь знает, как я это сделаю?

Спасибо

Ответы [ 2 ]

1 голос
/ 24 февраля 2011

Если вы можете получить эти 2 информации из своего поля blob_data, вы можете переопределить метод preSave вашего класса BlobData, который вызывается непосредственно перед сохранением объекта:

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

}
0 голосов
/ 25 февраля 2011

Правильно, после всего этого мне пришлось переопределить 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());
      }
    }
}

Это, похоже, работает для меня

Спасибо

...